在js中,有四種用于檢測數(shù)據(jù)類型的方式,分別是:
安圖網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)成立于2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
下面我們就來分別介紹一下上面四種方法的適用場景和局限性。
typeof 用來檢測數(shù)據(jù)類型的運算符
使用typeof檢測數(shù)據(jù)類型,返回值是字符串格式。能夠返回的數(shù)據(jù)類型
是:"number","string","bolean","undefined","function","object"。
局限性:
instanceof 檢測某一個實例是否屬于某個類
instanceof主要用來彌補typeof不能檢測具體屬于哪個對象的局限性。
局限性:
constructor 構(gòu)造函數(shù)
是函數(shù)原型上的屬性,該屬性指向的是構(gòu)造函數(shù)本身。
作用和instsnceof非常相似,與instanceof不同的是,不僅可以處理引用數(shù)據(jù)類型,還可以處理原始數(shù)據(jù)類型。
但是要注意一點的是,當(dāng)直接用(對象字面量或原始數(shù)據(jù)).constructor時,最好加上()。為了便于理解,我們來看一個例子。
這主要是由于js內(nèi)部解析方式造成的,js會把1.constructor解析成小數(shù),這顯然是不合理的,小數(shù)點后應(yīng)該是數(shù)字,因此就會引發(fā)報錯。js會把{}解析成語句塊來執(zhí)行,這時后面出現(xiàn)一個小數(shù)點顯然也是不合理的,因此也會報錯。為了解決這個問題,我們可以為表達式加上()使js能夠正確解析。
局限性:我們可以把類的原型進行重寫,在重寫的過程中很可能把之前constructor給覆蓋了,這樣檢測出來的結(jié)果就是不準確的
Object.prototype.toString.call() 原型鏈上的Object對象的toString方法
Object.prototype.toString的作用是返回當(dāng)前方法的執(zhí)行主體(方法中的this)所屬類的詳細信息,是最全面也是最常用的檢測數(shù)據(jù)類型的方式。
返回值的類型為string類型。