{} + [] 和 [] + {} 结果怎么会不同

How can {} + [] and [] + {} results be different

本文关键字:结果 怎么会      更新时间:2023-09-26

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

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

› {} + []
» 0
› [] + {}
» "[object Object]"

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

它被解析为:

{};   // empty block
+ []; // this result is shown in the console

与产生与[] + {}相同的结果的({}) + []进行比较;在这种情况下,括号强制{}"在表达式上下文中"处理/解析。

SO上有一堆关于{}的特殊双重性质的重复项(作为表达式或块?),但是,找到它们可能有些棘手。


我在元维基上找到了 https://meta.stackexchange.com/questions/83911/how-do-i-search-stackoverflow-for-at-keywords-like-private-or-synthesize,并使用 Symbolhound 解决了我能找到的"最接近"的重复项,这些问题(与"评估 JSON 时需要添加括号有关")或这个(使用像"{} == false"这样的结构是一个语法错误)。

如果有人知道更好的方法来搜索 SO 以查找此类问题,或者有指向此类重复方便的链接......