Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么{}+;[]不同于({}+;[])?_Javascript_Language Lawyer - Fatal编程技术网

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