回顧一下js中資料型別分為兩大類,基礎型別和引用資料型別,主要有:
基本資料型別
複雜資料型別
檢測js中的資料型別常用的方法有:
typeof
instanceof
object.prototype.tostring
對比一下這三種方法的優缺點:
typeof 5 // number 有效typeof 'dsd' // string 有效typeof true // boolean 有效typeof undefined // undefined 有效typeof function(){} // function 有效typeof null // object 無效typeof // object 無效typeof {} // object 無效
從以上例子中可以看到:
note:這在需要對資料結構進行詳細劃分的時候就不適用,比如說你要明確區分陣列和物件,然後進行處理的時候,typeof就完全達不到效果
好處:檢測快捷方便
壞處:不能檢測更為準確的資料型別,如array、object、null
mdn: 用於檢測建構函式的 prototype 屬性是否出現在某個例項物件的原型鏈上。
instanceof array; // true{} instanceof object; // truenewdate() instanceof date; // truefunction person(){};newperson() instanceof person; // true instanceof object; // truenewdate() instanceof object; // truenewperson instanceof object; // true
由上面例子可以看出:
模擬instanceof的檢測過程
instanceof (a, b) = return false;}
instanceof 只能用來判斷兩個物件是否屬於例項關係, 而不能判斷乙個物件例項具體屬於哪種型別。
由此可見instanceof在有些場景下依然不能滿足檢測具體型別的需求。
tostring是object的原型方法。呼叫該方法預設返回當前物件的[[class]]
這是乙個內部屬性,其格式為 [object ***] ,其中 *** 就是物件的型別。
object.prototype.tostring.call(5) // "[object number]"object.prototype.tostring.call('str') // "[object string]"object.prototype.tostring.call(true) // "[object boolean]"object.prototype.tostring.call(undefined) // "[object undefined]"object.prototype.tostring.call(null) // "[object null]"object.prototype.tostring.call(function(){}) // "[object function]"object.prototype.tostring.call() // "[object array]"object.prototype.tostring.call({}) // "[object object]"
由上可見tostring檢測各資料型別算非常準確了,基本上覆蓋了我們常用的資料型別
所以是判斷資料型別最常用的方法。
這裡利用tostring寫乙個檢測資料型別的方法
function checkdatatype(value)
同時,array物件提供isarray方法來檢測資料是否為陣列物件
array.isarray([1,2,4]) // truearray.isarray() // false
該方法用來檢測陣列型別也是非常方便的。 js檢測資料型別
要檢測乙個變數是不是基本資料型別?typeof 操作符是最佳的工具。說得更具體一 點,typeof 操作符是確定乙個變數是字串 數值 布林值,還是undefined 的最佳工具。如果變 量的值是乙個物件或null,則typeof 操作符會像下面例子中所示的那樣返回 object var s nich...
JS資料型別檢測
在js的日常使用中,經常需要檢測資料的型別,現在,就來看一下,js有哪些方法可以檢測資料的型別。typeof操作符返回乙個字串,表示未經計算的運算元的型別。typeof是js原生提供用來檢測型別的api,然而,並沒有什麼用。為什麼呢?因為,typeof不能準確地檢測出我們所想要知道的資料的型別。ty...
JS 資料型別檢測
tpeof val 用來檢測資料型別的運算子。基於typeof檢測出來的結果 首先是乙個字串 字串中是對應的型別 侷限性 typeof null object 但是null並不是物件 基於typeof 無法細分出當前值是普通物件還是陣列物件等,只要是物件型別,返回結果都是 object typeof...