问题
[] == ![]; // true or false
答案
[] == ![]; // true
理解
题目所述,分三步理解
- "!" 运算符优先级比 "==" 高,先运算,右边运算结果为 false,故
[] == false
- 其中一边有 Bool 值作比较,先转为 number 类型,故:
[] == 0
- 一边有 number 型作比较,先把另一边转换成 number 类型,故:
0 == 0; // true
总结
- 类型相同:都是引用类型为 false,不是引用类型,判断两边是否恒等。
- null == undefined ? 涉及 null 和 undefined 的,只有这个为 true,其他都为 false。(当然,自身和自身比较那肯定是 true,它们又不像 NaN 那么六亲不认)
- 一边为 Symbol 的,都为 false。
- 一边为 number 型的,把另一边强转(使用
Number()
)成 number 型再比较是否恒等。 - 一边为 boolean 类型的,把 boolean 类型先转换成 number 型,再执行第 4 条。
之前写过一篇相关的文章:对于'=='的思考
网友评论