5

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

当我输入

{} + []

在 Google Chrome JavaScript 控制台中,我得到

0

因此。但是,当我输入

Function("return {} + []")()

我明白了

"[object Object]"

因此。我认为这两个操作都应该返回相同的结果,因为一个只是另一个的包装器。为什么他们返回不同的结果?

4

1 回答 1

9

核心原因是,这{}在语句上下文中{ statement0; statement1 }与在表达式上下文中的含义不同({ "property": value, ... })

 {} + []

是一个块和一元比较运算符,因此与

{}  // An empty block of statements.
(+ [])  // Use of prefix operator +.

另一种是加号运算符的使用,当与两个对象一起使用时,将它们连接起来,如

return String({}) + String([])

由于Array.prototype.toString以逗号连接数组,因此类似于

return String({}) + [].join(",")

这减少到

return "[Object object]" + "";

最后到

return "[Object object]"
于 2012-08-13T21:26:51.943 回答