由于JavaScript是門松散類型語言,定義變量時沒有類型標識信息,并且在運行期可以動態(tài)更改其類型,所以一個變量的類型在運行期是不可預測的,因此,數(shù)據(jù)類型檢測在開發(fā)當中就成為一個必須要了解和掌握的知識點。
對于數(shù)據(jù)類型檢測,實習新手會用typeof,老司機會用Object.prototype.toString.call();,在實際開發(fā)當中,后者可以說是目前比較好的辦法了,可以準確地檢測幾種常見的內(nèi)置類型,要比typeof靠譜得多。那么究竟類型檢測都有哪些方法,各自都有哪些優(yōu)劣呢,博主就借此機會來聊一聊數(shù)據(jù)類型檢測的一些方法和其中的細節(jié)原理。
最早我們就使用下面的typeof方式檢測一個值的類型:
var foo = 3;var type = typeof foo;// 或者var type = typeof(foo);
后者看上去好像是一個函數(shù)調(diào)用,不過需要注意的是,typeof只是一個操作符,而不是函數(shù),typeof后面的括號也不是函數(shù)調(diào)用,而是一個強制運算求值表達式,就相當于數(shù)學運算中的括號一樣,最終返回一個運算結(jié)果,我們將上面的表達式分開就容易理解了:
var type = typeof (foo);
上面我們介紹到,初學者會用typeof判斷一個值的類型,而老手們都踩過它的坑:
// 下面幾個可以檢測出準確的類型typeof 3;