3 回答

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
(“x =”+ x)給出“x =值”而不是“x = tostring”的原因如下。在評(píng)估“+”時(shí),javascript首先收集操作數(shù)的原始值,然后根據(jù)每個(gè)基元的類型決定是否應(yīng)該應(yīng)用加法或連接。
所以,這就是你認(rèn)為它的工作方式
a + b:
pa = ToPrimitive(a)
if(pa is string)
return concat(pa, ToString(b))
else
return add(pa, ToNumber(b))
這就是實(shí)際發(fā)生的事情
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))
也就是說(shuō),toString應(yīng)用于valueOf的結(jié)果,而不是原始對(duì)象。
有關(guān)進(jìn)一步參考,請(qǐng)參閱ECMAScript語(yǔ)言規(guī)范中的第11.6.1節(jié)“加法運(yùn)算符”(+)。
*在字符串上下文中調(diào)用時(shí),ToPrimitive 會(huì)調(diào)用toString,但這不是這種情況,因?yàn)?#39;+'不強(qiáng)制執(zhí)行任何類型上下文。

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
對(duì)于內(nèi)置的Date類,情況似乎并非如此。("" + new Date(0)) === new Date(0).toString()
。Date對(duì)象toString()
在添加到某個(gè)東西時(shí)似乎總是返回其值
添加回答
舉報(bào)