Javascript 为什么{}+;[]不同于({}+;[])?
我最近震惊地发现:Javascript 为什么{}+;[]不同于({}+;[])?,javascript,language-lawyer,Javascript,Language Lawyer,我最近震惊地发现: > {}+[] 0 > ({}+[]) "[object Object]" > {}+[]+1 1 > ({}+[])+1 '[object Object]1' > {}+[] == ({}+[]) false 为什么用括号括起来会改变它的类型?{}+[]是一个空块,后跟一个带一元+运算符的数组,它本质上是,它是+[],它是0 ({}+[])是一个文本对象加上一个文本数组,两者都被转换成字符串,一个对象的字符串值是“[object ob
> {}+[]
0
> ({}+[])
"[object Object]"
> {}+[]+1
1
> ({}+[])+1
'[object Object]1'
> {}+[] == ({}+[])
false
为什么用括号括起来会改变它的类型?
{}+[]
是一个空块,后跟一个带一元+
运算符的数组,它本质上是,它是+[]
,它是0
({}+[])
是一个文本对象加上一个文本数组,两者都被转换成字符串,一个对象的字符串值是“[object object]”
加上一个空数组的字符串值,这个空数组是”
,因此结果就是你看到的。基本上,你在用一种非编译语言做一些奇怪的事情…所以你调用了规范中没有定义的奇怪的默认值和行为@CaffGeek此行为完全符合规范。在哪里?(真的很好奇,如果它在那里)当然在那里。这只是词法分析如何看待标记,以及如何将它们转换为+
的操作数,这并不少见。@Crashworks要获得更多笑声,请在浏览器控制台中尝试({}+[])+1=={}+[]+1
。