{} + [] in Javascript

{} + [] in Javascript

本文关键字:in Javascript      更新时间:2023-09-26

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

当我打字时

{} + []

在谷歌Chrome JavaScript控制台中,我得到

0

结果。但是,当我输入时

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

我得到

"[object Object]"

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

核心原因是{}在语句上下文{ 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]"