【发布时间】:2016-07-24 10:13:54
【问题描述】:
我最近惊恐地发现以下情况:
> {}+[]
0
> ({}+[])
"[object Object]"
> {}+[]+1
1
> ({}+[])+1
'[object Object]1'
> {}+[] == ({}+[])
false
为什么用括号括起来会改变它的类型?
【问题讨论】:
-
基本上,你在用非编译语言做一些奇怪的事情......所以你正在调用规范中未定义的奇怪默认值和行为......destroyallsoftware.com/talks/wat
-
@CaffGeek 这种行为完全符合规范。
-
在哪里? (真的很好奇里面有没有)
-
当然在里面。这就是词法分析如何看待标记以及如何将它们转换为
+的操作数,这并不罕见。 -
@Crashworks 获得更多笑声,请在浏览器控制台中尝试
({}+[])+1 == {}+[]+1。
标签: javascript language-lawyer