【问题标题】:Why is {}+[] different from ({}+[])? [duplicate]为什么 {}+[] 与 ({}+[]) 不同? [复制]
【发布时间】: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


【解决方案1】:

{} + [] 是一个空块,后跟一个带有一元 + 运算符的数组,本质上是 +[],即 0,

({} + []) 是一个字面量对象加上一个字面量数组,两者都被转换成字符串,对象的字符串值是"[object Object]" 加上一个空数组的字符串值"",因此你看到的结果.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2015-01-10
    • 1970-01-01
    相关资源
    最近更新 更多