JavaScript - 为什么+!{} [0] == 1?

时间:2015-06-23 16:31:37

标签: javascript type-conversion coercion

我在网上找到了一个有趣的JavaScript问题。这是+!{}[0]等于什么?

答案让我感到惊讶,原来是1

现在我试图理解为什么会出现这种语法。

这就是为什么我试图将其分解

!{}返回false

false[0]返回undefined

+false[0]返回NaN

所以我无法理解为什么上面的表达会回归1.任何理论?

2 个答案:

答案 0 :(得分:9)

您的运算符优先级错误(MDN)。它是:

{}[0]返回undefined

!undefined返回true

+true返回1

答案 1 :(得分:0)

我认为你不能像你那样打破这个,因为javascript有自己的规则,就像每个逻辑系统一样 我想,第一件事就是{}。这创造了一个中立的对象。在下一步[0]应该发生,所以它需要对象的第一个“元素”,而不是可能将作为emtpy数组处理。 这将被强制转换为False,并用“!”反转。 由于+期望一个整数,而true是非数字,它将被处理为零,在这种情况下增加“+”,因此最终结果为1.