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' > |

Java 學習之路





