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.
我在网上发现了一个有趣的 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.