{} + []和[] + {}结果如何不同

sup*_*ero 7 javascript

可能重复:
CodeMash 2012的"Wat"演讲中提到的这些奇怪的JavaScript行为的解释是什么?

有人可以向我解释一下,在javascript中,返回结果的结果会有所不同:

› {} + []
» 0
› [] + {}
» "[object Object]"
Run Code Online (Sandbox Code Playgroud)

小智 7

这是因为{}代码中的不是对象文字,而是空块.

它被解析为:

{};   // empty block
+ []; // this result is shown in the console
Run Code Online (Sandbox Code Playgroud)

与之相比({}) + [],得到的结果相同[] + {}; 在这种情况下,括号强制{}"在表达式上下文中"处理/解析.

有一个一堆上SO重复的大约的这个特定的双本质{}(作为表达或块?),但,发现它们可以是有点棘手..


我在Meta上找到https://meta.stackexchange.com/questions/83911/how-do-i-search-stackoverflow-for-at-keywords-like-private-or-synthesize,并使用Symbolhound"最接近"的重复项我能找到解决问题的解决这样的(这涉及到需要添加括号时"eval'ing JSON")或(其中类似的使用结构的"{} ==假"是一个语法错误).

如果有人知道更好的方法来搜索SO这个问题,或者有一个链接到这样的重复方便..