JavaScript中一個比較便捷的地方,便是它可以給每一個在比較運算的結果變量強行轉化成布爾類型。但是從另一方面來考慮,有時候它也會為我們帶來很多不便,下面的這些例子便是一些一直困擾很多程序員的代碼實例:
~~~
console.log(false == '0');
console.log(null == undefined);
console.log(" \t\r\n" == 0);
console.log('' == 0); // And these do too!
if ({}) // ...
if ([]) // ...
~~~
最后兩行的代碼雖然條件判斷為空(經常會被人誤認為轉化為false),但是其實不管是{ }還是[ ]都是一個實體類,而任何的類其實都會轉化為true。就像這些例子所展示的那樣,其實有些類型強制轉化非常模糊。因此很多時候我們更愿意用 === 和 !== 來替代== 和 !=, 以此來避免發生強制類型轉化。. ===和!== 的用法和之前的== 和 != 一樣,只不過他們不會發生類型強制轉換。另外需要注意的一點是,當任何值與 NaN 比較的時候,甚至包括他自己,結果都是false。因此我們不能用簡單的比較字符來決定一個值是否為 NaN 。我們可以用內置的 isNaN() 函數來辨別:
~~~
`console.log(NaN == NaN); // false
console.log(NaN === NaN); // false
console.log(isNaN(NaN)); // true `
~~~