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

JavaScript - Why does +!{}[0] == 1?

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

答案真是让我吃惊,竟然是1

现在我正试图理解为什么这种语法会导致那样。

这就是我试图分解它的原因

!{} returns false

false[0] returns undefined

+false[0] returns NaN

所以我不明白为什么上面的表达式会 return 1. 有什么理论吗?

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

{}[0] returns undefined

!undefined returns true

+true returns 1

我不认为你可以像你那样分解它,因为 javascript 有他自己的规则,就像每个逻辑系统一样 我认为首先触发的是 {}。这会创建一个中性对象。在下一步 [0] 应该发生,所以它需要对象的第一个 "element",这可能会被处理为空数组。 这将被类型转换为 False,并且您用“!”反转。 由于 + 需要一个整数,而 true 不是一个数字,它将被处理为零,在这种情况下由“+”递增,所以最终结果是 1.