pt系列文章:自動類型轉(zhuǎn)換-續(xù)

上一篇文章中,我們詳細(xì)講解了JavaScript中的自動類型轉(zhuǎn)換,由于篇幅限制,沒能覆蓋到所有的轉(zhuǎn)換規(guī)則,這次準(zhǔn)備詳細(xì)講解一下。

上次我們提到了對象類型參與運(yùn)算時轉(zhuǎn)換規(guī)則:

1). 在邏輯環(huán)境中執(zhí)行時,會被轉(zhuǎn)換為true

2). 在字符串環(huán)境和數(shù)字環(huán)境中,它的valueOf()方法和toString()方法會依次被調(diào)用,然后根據(jù)返回值進(jìn)行再次轉(zhuǎn)換。首先,valueOf()方法會被調(diào)用,如果其返回值是基礎(chǔ)類型,則將這個返回值轉(zhuǎn)為目標(biāo)類型,如果返回值不是基礎(chǔ)類型,則再試圖調(diào)用toString()方法,然后將返回值轉(zhuǎn)型。如果最終的返回值不是基礎(chǔ)類型,則轉(zhuǎn)型會拋出一個異常,如果是基礎(chǔ)類型,則會相應(yīng)的轉(zhuǎn)為字符串或數(shù)字。

接著上次的講,當(dāng)加號“+”作為一元操作符應(yīng)用在對象類型上面時,valueOf()和toString()方法,將會有機(jī)會被調(diào)用,最終返回值會被轉(zhuǎn)為數(shù)字類型,我們因而會得到一個數(shù)字或NaN。先來看看valueOf()和toString()的調(diào)用順序:

復(fù)制代碼
var o = {
    valueOf: function() { return '3';
    },
    toString: function() { return '5';
    }
}; var foo = +o;

console.log(foo); //
        		

網(wǎng)友評論