The*_*Hat 12 javascript arrays
Run Code Online (Sandbox Code Playgroud)>> {} + [] 0
所以EmptyObject + EmptyArray的计算结果为0
.(免责声明:我不完全理解为什么会这样.)好的,现在我想把它分配0
给一个变量!看起来很简单:
Run Code Online (Sandbox Code Playgroud)>> var a = {} + []; undefined >> a "[object Object]"
好吧,也许不那么容易.谷歌有点......啊哈!{}
在这种情况下,实际上是一个代码块,而不是一个空对象.所以lemme让它看起来更像代码块:
Run Code Online (Sandbox Code Playgroud)>> var a = { } + []; undefined >> a "[object Object]"
...宕.自我注意:JavaScript忽略空格.
有什么方法可以分配{} + []
(或类似)变量,但仍然有{} + []
评估0
?
Chu*_*uck 11
不,没有办法将确切的代码分配给变量并使其工作为0,因为解析给出0的代码不构成表达式†,只能分配表达式.你得到0的原因是因为大括号基本上被忽略为空语句然后你得到了表达式的结果+ []
(也就是说,一元+运算符应用于一个空数组).因此,为了获得相同的结果,您需要更改表达式,以便它能够解决问题+[]
.例如,你可以这样做var a = ({}, + [])
,这会给你正确的答案(因为逗号导致+ []
单独评估).
†这也是您尝试分配时给出不同答案的原因.这迫使代码被解析为一个表达式,因此{}
它不再是一个空块而+
不再是一元+,而是二进制加上一个空对象和一个空数组作为操作数.