Javascript 分配`{}+;[]`到一个变量

Javascript 分配`{}+;[]`到一个变量,javascript,arrays,Javascript,Arrays,因此,EmptyObject+EmptyArray的计算结果为0。(免责声明:我不完全理解这是为什么。)好的,现在我想把这个0赋值给一个变量!看起来很简单: 嗯,也许没那么容易。谷歌有点。。。啊哈{}在此上下文中,不是空对象。让我让它看起来更像一个代码块: ……该死。self注意:JavaScript忽略空白 是否有任何方法可以将{}+[](或类似)分配给变量,但仍将该{}+[]计算为0?尝试: >> var a = { } + []; undefined &

因此,EmptyObject+EmptyArray的计算结果为
0
。(免责声明:我不完全理解这是为什么。)好的,现在我想把这个
0
赋值给一个变量!看起来很简单:

嗯,也许没那么容易。谷歌有点。。。啊哈<代码>{}在此上下文中,不是空对象。让我让它看起来更像一个代码块:

……该死。self注意:JavaScript忽略空白


是否有任何方法可以将
{}+[]
(或类似)分配给变量,但仍将该
{}+[]
计算为
0

尝试:

>> var a = 
   {

   }
   + [];
undefined
>> a
"[object Object]"

虽然不建议使用
eval
方法否,但无法将该确切代码分配给变量并将其计算为0,因为对给出0的代码的解析不构成表达式†,只能分配表达式。之所以得到0,是因为大括号基本上作为空语句被忽略,然后得到表达式
+[]
(即应用于空数组的一元+运算符)的结果。因此,为了得到相同的结果,您需要修改表达式,使其只计算为
+[]
。例如,您可以执行
var a=({},+[])
,这将为您提供正确的答案(因为逗号会使
+[]
单独计算)


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

为什么要这样做?XD@NiettheDarkAbsol因为那会很有趣P我必须有更好的理由吗?
{}
之后,
=
得到不同的解释。这让我想起了这个宝石:@SergeyK这就是我第一次听说的
{}+[]=0
我想这里怎么不是最重要的,但为什么是。也许{}+的长度是0,因为两者都是相同的empty@Huangism不,它不是用长度来计算的,因为如果我们有
[2]
,例如,结果将是
2
@ToKeN yea,但是[2]+2的结果是22,而不是4,所以[2]必须是string@Huangism否,
eval(“{}+[2]+2”)给予
4
我向你鞠躬,伟大的Javascript之神!
>> var a = {} + [];
undefined
>> a
"[object Object]"
>> var a = 
   {

   }
   + [];
undefined
>> a
"[object Object]"
var a = eval("{} + []");

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