[] == ![]

2019-12-27  本文已影响0人  前端阿良古

问题

[] == ![]; // true or false

答案

[] == ![]; // true

理解

题目所述,分三步理解

  1. "!" 运算符优先级比 "==" 高,先运算,右边运算结果为 false,故
[] == false
  1. 其中一边有 Bool 值作比较,先转为 number 类型,故:
[] == 0
  1. 一边有 number 型作比较,先把另一边转换成 number 类型,故:
0 == 0; // true

总结

  1. 类型相同:都是引用类型为 false,不是引用类型,判断两边是否恒等。
  2. null == undefined ? 涉及 null 和 undefined 的,只有这个为 true,其他都为 false。(当然,自身和自身比较那肯定是 true,它们又不像 NaN 那么六亲不认)
  3. 一边为 Symbol 的,都为 false。
  4. 一边为 number 型的,把另一边强转(使用 Number())成 number 型再比较是否恒等。
  5. 一边为 boolean 类型的,把 boolean 类型先转换成 number 型,再执行第 4 条。

之前写过一篇相关的文章:对于'=='的思考

上一篇 下一篇

猜你喜欢

热点阅读