为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 {} + [] == 0, 而 {} + {} == ‘[object Object

为什么 {} + [] == 0, 而 {} + {} == ‘[object Object

交互式爱情 2019-03-13 10:19:35
为什么 {} + [] == 0 ?在将操作符两边的参数当作对象的情况下,{} + [] == '[object Object]',但在控制台下返回的结果确是 0。搜过这类的问题,说的是 {} 被当做了一个块级作用域, + 被当做了一个一元操作符,将 [] 转化为了number 类型,所以为 0,我能够理解这种解释但为什么 {} + {} 中没有按照前面模式进行处理,+ {} 虽然会得到 NaN, 但是并不会报错呀,是能够正常处理的,前面的 {} 为什么没有被当做块级作用域?
查看完整描述

3 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

我把{}+{}生成了AST结果如下


{

  "type": "Program",

  "start": 0,

  "end": 5,

  "body": [

    {

      "type": "BlockStatement",

      "start": 0,

      "end": 2,

      "body": []

    },

    {

      "type": "ExpressionStatement",

      "start": 2,

      "end": 5,

      "expression": {

        "type": "UnaryExpression",

        "start": 2,

        "end": 5,

        "operator": "+",

        "prefix": true,

        "argument": {

          "type": "ObjectExpression",

          "start": 3,

          "end": 5,

          "properties": []

        }

      }

    }

  ],

  "sourceType": "module"

}

从AST可以看出,第一个{}还是被转化为代码块,+为一元运算符,然鹅在chrome的表现中确实是被当做算术运算符处理"[object Object][object Object]",这或许是chrome的特性(胡扯的,我并不知道为什么),在firefox中结果仍然为NaN。


查看完整回答
反对 回复 2019-04-14
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

因为你把{}+{}写在括号里了

https://img1.sycdn.imooc.com//5cb2a1120001bd2104500800.jpg

查看完整回答
反对 回复 2019-04-14
  • 3 回答
  • 0 关注
  • 744 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信