跳到主要内容

0 == !0 结果是什么?为什么?

面试速答(30 秒版 TL;DR)​

  • 结果:false。
  • 原因:!0 先走 ToBoolean 得到 true,然后 0 == true 里 true 会被转成数字 1,最后变成 0 == 1,所以是 false。

按求值顺序拆开(面试就这么讲)​

!0; // true,因为 0 是 falsy
0 == true; // true -> 1
0 == 1; // false

对比记忆(容易混)​

0 == false; // true(false -> 0)
0 == !0; // false(!0 -> true -> 1)

常见追问(顺带背)​

Q1:那 [] == false 呢?​

[] == false; // true

口述:

  • false -> 0
  • [] 是对象,先 ToPrimitive:[] -> ""
  • "" -> 0
  • 所以 0 == 0 为 true

Q2:业务代码建议怎么写?​

  • 不要写 == 去赌隐式转换结果。
  • 需要判断“是否为 0”:用 x === 0。
  • 需要判断“是否为 falsy”:用 if (!x)(并清楚 falsy 清单)。