猿问

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

为什么 {} + [] == 0 ?

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


交互式爱情
浏览 745回答 3
3回答

冉冉说

我把{}+{}生成了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。

猛跑小猪

因为你把{}+{}写在括号里了
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答