当我输入
{} + []
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)
结果是.我认为两个操作都应返回相同的结果,因为一个操作只是另一个操作的包装器.为什么他们会返回不同的结果?
核心原因是{}在语句上下文{ 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)
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |