将`{} + []`赋给变量

时间:2014-03-31 18:37:39

标签: javascript arrays

>> {} + []
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

2 个答案:

答案 0 :(得分:11)

不,没有办法将确切的代码分配给变量并使其达到0,因为解析给出0的代码不构成表达式†,只能分配表达式。你得到0的原因是因为大括号基本上被忽略为空语句然后你得到表达式+ []的结果(也就是说,应用于空数组的一元+运算符) 。因此,为了获得相同的结果,您需要更改表达式,以便它恰好适用于+[]。例如,您可以执行var a = ({}, + []),这会给您正确的答案(因为逗号会导致+ []单独评估)。

†这也是您在尝试分配时给出不同答案的原因。这会强制将代码解析为表达式,因此{}不再是空块而+不再是一元+,而是二元加上一个空对象和一个空数组作为操作数。

答案 1 :(得分:3)

尝试:

var a = eval("{} + []");

console.log(a); // returns (integer) 0

虽然建议不要使用eval方法