3 回答
TA贡献1854条经验 获得超8个赞
(“x =”+ x)给出“x =值”而不是“x = tostring”的原因如下。在评估“+”时,javascript首先收集操作数的原始值,然后根据每个基元的类型决定是否应该应用加法或连接。
所以,这就是你认为它的工作方式
a + b:
pa = ToPrimitive(a)
if(pa is string)
return concat(pa, ToString(b))
else
return add(pa, ToNumber(b))
这就是实际发生的事情
a + b:
pa = ToPrimitive(a)
pb = ToPrimitive(b)*
if(pa is string || pb is string)
return concat(ToString(pa), ToString(pb))
else
return add(ToNumber(pa), ToNumber(pb))
也就是说,toString应用于valueOf的结果,而不是原始对象。
有关进一步参考,请参阅ECMAScript语言规范中的第11.6.1节“加法运算符”(+)。
*在字符串上下文中调用时,ToPrimitive 会调用toString,但这不是这种情况,因为'+'不强制执行任何类型上下文。
TA贡献1856条经验 获得超11个赞
对于内置的Date类,情况似乎并非如此。("" + new Date(0)) === new Date(0).toString()
。Date对象toString()
在添加到某个东西时似乎总是返回其值
添加回答
举报