由于JavaScript是門松散類型語言,定義變量時(shí)沒有類型標(biāo)識(shí)信息,并且在運(yùn)行期可以動(dòng)態(tài)更改其類型,所以一個(gè)變量的類型在運(yùn)行期是不可預(yù)測(cè)的,因此,數(shù)據(jù)類型檢測(cè)在開發(fā)當(dāng)中就成為一個(gè)必須要了解和掌握的知識(shí)點(diǎn)。

對(duì)于數(shù)據(jù)類型檢測(cè),實(shí)習(xí)新手會(huì)用typeof,老司機(jī)會(huì)用Object.prototype.toString.call();,在實(shí)際開發(fā)當(dāng)中,后者可以說是目前比較好的辦法了,可以準(zhǔn)確地檢測(cè)幾種常見的內(nèi)置類型,要比typeof靠譜得多。那么究竟類型檢測(cè)都有哪些方法,各自都有哪些優(yōu)劣呢,博主就借此機(jī)會(huì)來聊一聊數(shù)據(jù)類型檢測(cè)的一些方法和其中的細(xì)節(jié)原理。

最早我們就使用下面的typeof方式檢測(cè)一個(gè)值的類型:

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

var foo = 3;var type = typeof foo;// 或者var type = typeof(foo);

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

后者看上去好像是一個(gè)函數(shù)調(diào)用,不過需要注意的是,typeof只是一個(gè)操作符,而不是函數(shù),typeof后面的括號(hào)也不是函數(shù)調(diào)用,而是一個(gè)強(qiáng)制運(yùn)算求值表達(dá)式,就相當(dāng)于數(shù)學(xué)運(yùn)算中的括號(hào)一樣,最終返回一個(gè)運(yùn)算結(jié)果,我們將上面的表達(dá)式分開就容易理解了:

var type = typeof (foo);

上面我們介紹到,初學(xué)者會(huì)用typeof判斷一個(gè)值的類型,而老手們都踩過它的坑:

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

// 下面幾個(gè)可以檢測(cè)出準(zhǔn)確的類型typeof 3;