問題
[] == ![]; // true or false
答案
[] == ![]; // true
理解
題目所述,分三步理解
- "!" 運(yùn)算符優(yōu)先級(jí)比 "==" 高,先運(yùn)算,右邊運(yùn)算結(jié)果為 false,故
[] == false
- 其中一邊有 Bool 值作比較,先轉(zhuǎn)為 number 類型,故:
[] == 0
- 一邊有 number 型作比較,先把另一邊轉(zhuǎn)換成 number 類型,故:
0 == 0; // true
總結(jié)
- 類型相同:都是引用類型為 false,不是引用類型,判斷兩邊是否恒等。
- null == undefined ? 涉及 null 和 undefined 的,只有這個(gè)為 true,其他都為 false。(當(dāng)然,自身和自身比較那肯定是 true,它們又不像 NaN 那么六親不認(rèn))
- 一邊為 Symbol 的,都為 false。
- 一邊為 number 型的,把另一邊強(qiáng)轉(zhuǎn)(使用
Number())成 number 型再比較是否恒等。 - 一邊為 boolean 類型的,把 boolean 類型先轉(zhuǎn)換成 number 型,再執(zhí)行第 4 條。
之前寫過一篇相關(guān)的文章:對于'=='的思考