我在网上发现了一个有趣的JavaScript问题。它是这样的: +!{}[0]
等于什么?
真正让我惊讶的是答案竟然是1
。
现在我正在努力理解为什么这个语法会导致这种结果。
所以我试图分解它:
!{}
返回 false
false[0]
返回 undefined
+false[0]
返回 NaN
因此,我不明白为什么上面的表达式会返回1
。 有任何理论吗?
我在网上发现了一个有趣的JavaScript问题。它是这样的: +!{}[0]
等于什么?
真正让我惊讶的是答案竟然是1
。
现在我正在努力理解为什么这个语法会导致这种结果。
所以我试图分解它:
!{}
返回 false
false[0]
返回 undefined
+false[0]
返回 NaN
因此,我不明白为什么上面的表达式会返回1
。 有任何理论吗?
{}[0]
时,返回的是[0]
而不是undefined
。为什么?此外,![0]
有什么意义? - Rajvar a = {}[0];
然后只记录 a
,它会显示正确的值(undefined
)。所以我的猜测是,在这种情况下,Chrome将 {}
和 [0]
视为两个独立的语句,并仅打印第二个语句的结果。如果你写 {}"hello"
,也会打印 hello
。但无论如何,{}[0]
明确是 undefined
。 - basilikum我认为你不能像你这样分解它,因为JavaScript有自己的规则,几乎像每个逻辑系统一样。 我认为首先被触发的将是{}。这创建了一个中性对象。在下一步中应该发生[0],所以它取出对象的第一个“元素”,然后可能会被处理为空数组。 这将被强制转换为False,并且您可以使用“!”来反转它。 由于+需要一个整数而true不是数字,因此它将被处理为零,在这种情况下通过“+”递增,因此最终结果为1。
0
,与数组无关。 - Felix Kling