>> {} + [] 0
所以EmptyObject + EmptyArray的计算结果为0
。 (免责声明:我不完全理解为什么会这样。)好的,现在我想将此0
分配给变量!看起来很简单:
嗯,也许不那么容易。 谷歌谷歌...... 啊哈!>> var a = {} + []; undefined >> a "[object Object]"
{}
在此上下文is actually a code block中,而不是空对象。所以lemme让它看起来更像一个代码块:
>> var a = { } + []; undefined >> a "[object Object]"
...宕。 自我注意:JavaScript忽略空格。
我是否可以将{} + []
(或类似)分配给变量,但仍然{} + []
评估为0
?
答案 0 :(得分:11)
不,没有办法将确切的代码分配给变量并使其达到0,因为解析给出0的代码不构成表达式†,只能分配表达式。你得到0的原因是因为大括号基本上被忽略为空语句然后你得到表达式+ []
的结果(也就是说,应用于空数组的一元+运算符) 。因此,为了获得相同的结果,您需要更改表达式,以便它恰好适用于+[]
。例如,您可以执行var a = ({}, + [])
,这会给您正确的答案(因为逗号会导致+ []
单独评估)。
†这也是您在尝试分配时给出不同答案的原因。这会强制将代码解析为表达式,因此{}
不再是空块而+
不再是一元+,而是二元加上一个空对象和一个空数组作为操作数。
答案 1 :(得分:3)
尝试:
var a = eval("{} + []");
console.log(a); // returns (integer) 0
虽然建议不要使用eval
方法