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