JavaScript 語言核心(5)操弄數值的運算子
JavaScript 語言核心(4)弱型別的代價 – WAT! << 前情 對於運算子的使用,最主要是要注意自動型態轉換的問題,其中有關 當 > 1 + 2 + '3'; '33' > '1' + 2 + 3; '123' > '1' + (2 + 3); '15' > 第一個式子是先作 在比較運算上,除了〈弱型別的代價〉中提到的使用 但如果
> var date = new Date(); undefined > date.valueOf(); 1397699040389 > date > 1397699040389; false > date > 1397699040388; true > date > new Date(); false > new Date() > date; true > var obj = { ... valueOf : function() { ..... return 100; ..... } ... }; undefined > 1 + obj; 101 > 1 > obj; false > 正如上例所示,其他運算式若需轉為數值,也是透過 預設 > var o1 = {}; undefined > var o2 = {}; undefined > o1.valueOf(); {} > o2; {} > o1 >= o2; true > o1 > o2; false > o1 === o2; false > 注意, 如果你要測試某個物件上是否有某個特性,且要傳回 > 'x' in {x : 10}; true > 之後還會詳細介紹物件,在這邊也可以看到,物件上的特性名稱,實際上是個字串。 如果你想要得知某個物件是否由哪個建構式(Constructor,或所謂的類別,雖然類別這名詞並不精確)所產生,則可以使用 > [] instanceof Array; true > [] instanceof Object; true > [] instanceof Date; false > 對於沒有繼承關係的,
> typeof 1; 'number' > typeof ''; 'string' > typeof true; 'boolean' > typeof function() {}; 'function' > typeof undefined; 'undefined' > typeof {}; 'object' > typeof null; 'object' >
不過, > 'left' && 'right'; 'right' > 0 && 'right'; 0 > 'left' && 0; 0 > 在上面第一個例子中,左運算元非空字串,會當作結果成立,所以再判斷右運算元,也非空字串,所以判斷整個
> 'right' || 'left'; 'right' > 0 || 'left'; 'left' > 'right' || 0; 'right' > 這個特性很有用,例如,想要在某個值存在時直接使用,而不存在時提供預設值,則可以如下: function doSome(arg) { var option = arg || 'default'; return option; } console.log(doSome()); // default console.log(doSome('caterpillar')); // caterpillar 上面用到了函式作為範例,之後還會詳細說明,像是如果函式參數很多時,還可以合併物件的方式提供預設值。上例其實就相當於使用 function doSome(arg) { var option = arg ? arg : 'default'; return option; } console.log(doSome()); // default console.log(doSome('caterpillar')); // caterpillar 兩者可以達到相同的效果,不過慣例上還是使用
> void 0; undefined > typeof void 0; 'undefined' > |