Javascript中的{} + []

Mar*_*oth 5 javascript

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

当我输入

{} + []
Run Code Online (Sandbox Code Playgroud)

我得到了谷歌Chrome JavaScript控制台

0
Run Code Online (Sandbox Code Playgroud)

结果是.但是,当我输入

Function("return {} + []")()
Run Code Online (Sandbox Code Playgroud)

我明白了

"[object Object]"
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*uel 9

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

 {} + []
Run Code Online (Sandbox Code Playgroud)

是一个块和一元比较运算符,所以相同

{}  // An empty block of statements.
(+ [])  // Use of prefix operator +.
Run Code Online (Sandbox Code Playgroud)

另一个是使用plus运算符,当与两个对象一起使用时,将它们连接起来

return String({}) + String([])
Run Code Online (Sandbox Code Playgroud)

由于Array.prototype.toString在逗号上连接数组,它类似于

return String({}) + [].join(",")
Run Code Online (Sandbox Code Playgroud)

减少到

return "[Object object]" + "";
Run Code Online (Sandbox Code Playgroud)

最后到

return "[Object object]"
Run Code Online (Sandbox Code Playgroud)