当我输入
{} + []
在 Google Chrome JavaScript 控制台中,我得到
0
因此。但是,当我输入
Function("return {} + []")()
我明白了
"[object Object]"
因此。我认为这两个操作都应该返回相同的结果,因为一个只是另一个的包装器。为什么他们返回不同的结果?
当我输入
{} + []
在 Google 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]"