下面是題目的類型轉換結果:
Boolean([]); //true
Number([]); //0
Number({}); // NaN
Number(false); //0
因此:
console.log(([])?true:fasle);// => console.log((true)?true:false);
console.log([]==false?true:false); // => console.log(0==0?true:false);
console.log(({}==false)?true:false); // => console.log((NaN==0)?true:false);
《JavaScript權威指南》的部分相關知識點
“==”運算符(兩個操作數的類型不相同時)
- 如果一個值是null,另一個值是undefined,則它們相等
- 如果一個值是數字,另一個值是字符串,先將字符串轉換為數學,然后使用轉換后的值進行比較。
- 如果其中一個值是true,則將其轉換為1再進行比較。如果其中的一個值是false,則將其轉換為0再進行比較。
- 如果一個值是對象,另一個值是數字或字符串,則將對象轉換為原始值,再進行比較。
對象到數字的轉換
- 如果對象具有valueOf()方法,后者返回一個原始值,則JavaScript將這個原始值轉換為數字(如果需要的話)並返回一個數字。
- 否則,如果對象具有toString()方法,后者返回一個原始值,則JavaScript將其轉換並返回。(對象的toString()方法返回一個字符串直接量(作者所說的原始值),JavaScript將這個字符串轉換為數字類型,並返回這個數字)。
- 否則,JavaScript拋出一個類型錯誤異常。
空數組轉換為數字0
- 數組繼承了默認的valueOf()方法,這個方法返回一個對象而不是一個原始值,因此,數組到數學的轉換則調用toString()方法。空數組轉換為空字符串,空字符串轉換為數字0.
