第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Javascript中的valueOf()與toString()

Javascript中的valueOf()與toString()

慕碼人8056858 2019-08-30 15:09:12
在Javascript中,每個(gè)對(duì)象都有一個(gè)valueOf()和toString()方法。我原以為每當(dāng)調(diào)用字符串轉(zhuǎn)換時(shí)都會(huì)調(diào)用toString()方法,但顯然它被valueOf()所取代。例如,代碼var x = {toString: function() {return "foo"; },         valueOf: function() {return 42; }};window.console.log ("x="+x);window.console.log ("x="+x.toString());將打印x=42x=foo這讓我覺(jué)得倒退..如果x是一個(gè)復(fù)數(shù),例如,我希望valueOf()給我它的大小,但每當(dāng)我想轉(zhuǎn)換成一個(gè)字符串我就會(huì)想要像“a + bi”這樣的東西。而且我不想在隱含字符串的上下文中顯式調(diào)用toString()。這只是它的方式嗎?
查看完整描述

3 回答

?
嗶嗶one

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í)行任何類型上下文。


查看完整回答
反對(duì) 回復(fù) 2019-08-30
?
呼喚遠(yuǎn)方

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í)似乎總是返回其值

查看完整回答
反對(duì) 回復(fù) 2019-08-30
  • 3 回答
  • 0 關(guān)注
  • 378 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)