【问题标题】: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: