在js的日常使用中,經常需要檢測資料的型別,現在,就來看一下,js有哪些方法可以檢測資料的型別。
typeof
操作符返回乙個字串,表示未經計算的運算元的型別。typeof
是js原生提供用來檢測型別的api,然而,並沒有什麼用。為什麼呢?
因為,
typeof
不能準確地檢測出我們所想要知道的資料的型別。
typeof
在大部分情況下都會返回'object'
,如檢測array、function、null時。
typeof
的唯一作用就是檢測變數是否已經被定義。
// 檢測變數 *** 是否被定義
typeof *** === 'undefined'
// 如果上面判斷返回 true,說明變數 *** 未定義或值為 undefined,這個方法用來避免referenceerror錯誤。
複製**
instanceof
操作符用來檢測乙個物件的原型鏈上是否存在某個建構函式的prototype,一般是檢測被檢測物件的建構函式的prototype。
let obj = new
object()
obj instanceof objcet // true
let number = new
number(1)
number instanceof
number
// true
let arr =
arr instanceof
array
// true
複製**
instanceof
有乙個缺陷:如果資料不是使用建構函式構造出來的,那麼結果就會出錯。比如:
let str = "asdfghjkl"
str instanceof
string
// false
複製**
所以,instanceof
只有在檢測自定義的物件時才有用。
實際開發中,jser使用object.prototype.tostring()
來檢測資料型別。
object.prototype.tostring()
會返回被呼叫物件的乙個型別字串,如[object object]
var class2type = {}
"boolean number string function array date regexp object error".split(" ").foreach(function(e,i))
function
_typeof(obj)
return
typeof obj === "object" || typeof obj === "function" ?
class2type[ object.prototype.tostring.call(obj) ] || "object" :
typeof obj
// 判斷 obj 是基本型別還是複雜型別,若是基本型別,直接返回 typeof obj
// 如果 obj 不是基本型別,使用 object.prototype.tostring.call(obj)檢測實際型別,若與預定型別匹配,則輸出預定型別,否則輸出 object
}複製**
/**
* gettype
* @description 返回給定引數的資料型別
* @param args 需要做型別檢測的引數
* @return args 的資料型別,如 string
*/function
gettype(args)
arguments = array.prototype.slice.call(arguments)
if(arguments.length === 0)
let class2type = {}
"number,string,boolean,object,array,function,date,regexp,error".split(',').foreach((value,index)=>]`] = value.tolowercase()
})arguments.map((param)=>else
if(typeof param === 'object' || typeof param === 'function')else
})return types
}// object.prototype.tostring() 會將引數的型別以如 [object object] 的形式列印出來。
// class2type物件中每一項的屬性名都對應乙個 tostrign 列印出來的值
// 將 param tostring 出來的值與 class2type 進行匹配,就能知曉 param 的型別。
複製**
js檢測資料型別
要檢測乙個變數是不是基本資料型別?typeof 操作符是最佳的工具。說得更具體一 點,typeof 操作符是確定乙個變數是字串 數值 布林值,還是undefined 的最佳工具。如果變 量的值是乙個物件或null,則typeof 操作符會像下面例子中所示的那樣返回 object var s nich...
JS 資料型別檢測
tpeof val 用來檢測資料型別的運算子。基於typeof檢測出來的結果 首先是乙個字串 字串中是對應的型別 侷限性 typeof null object 但是null並不是物件 基於typeof 無法細分出當前值是普通物件還是陣列物件等,只要是物件型別,返回結果都是 object typeof...
js檢測資料型別
一 js中資料型別 二 判斷資料型別 下面將對如下資料進行判斷它們的型別 var bool true var num 1 var str abc var und undefined var nul null var arr 1,2,3 var obj var fun function 1.使用typ...