【问题标题】:Implicit type coercion with objects对象的隐式类型强制
【发布时间】:2019-12-06 00:07:15
【问题描述】:
var a = {};
a + 1 // return "[object Object]1"

我知道为什么会这样。对象 toPrimitive 发生后 a.toString 返回 [object Object] 并与数字合并 但是为什么当我输入这样的代码时

{} + 1 // return 1

对象没有转换成字符串?

还有为什么 object toPrimitive 提示 Number 返回 0 当对象转换为数字时,这是看 valueOf 函数,为什么 valueOf 返回 0?

【问题讨论】:

标签: javascript types type-conversion type-coercion


【解决方案1】:

第一个是一个对象,你正在添加带有数字的对象

var a = {};
a + 1 // return "[object Object]1"

第二个只是block statement 不是对象

{} + 1 // return 1

【讨论】:

    【解决方案2】:

    not 在表达式上下文中时,{} 将被解释为一个空块,所以

    {} + 1
    

    就像

    {
      // no statements here
    }
    +1
    

    + 是一元加号运算符。这里的{} 不表示对象文字,而是一个块,+1 是评估的最终(也是唯一)表达式,因此如果您只是在控制台中输入,这就是控制台将显示的内容。

    如果您在表达式上下文中,{} + 1 确实会计算为[object Object]1

    console.log(
      {} + 1
    );

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 2015-02-26
      相关资源
      最近更新 更多