js資料型別檢測的幾種方法的原理及其優缺點
在日常開發中總是會用到型別檢測,今天就總結一下常用的型別檢測方法
1.typeof (檢測基本型別值)
1) 使用時直接typeof
要檢測的型別值,比如
2)typeof
可以檢測number
、string
、boolean
、null
、undefined
、symbol
、bigint
這些基本型別值。
3)對於引用型別只可以檢測出object
(包括不同物件、陣列、正則、日期等等)、function
也就是說不管物件型別具體為什麼型別都顯示為object
比如:
4)關於2.instanceof(可用來檢測具體物件型別)typeof
的一些細節: 返回的結果都是字串,還有對於null
的檢測結果也為object
1)使用時[要檢測的資料] instanceof [要驗證的物件型別]
比如
2)返回乙個boolean
資料,來判斷是否屬於資料該類
3)原理就是通過原型鏈來判斷例項的__proto__是否與檢測型別的prototype一致,比如
可以看到陣列檢測object
也為true
,其實就是根據原型鏈迴圈的比對就像如下4)關於instanceof
的細節問題instanceof
無法檢測基本型別值,比如乙個number
、string
等,如下所示除非是3.通過number
類的例項constructor
判斷例項個類的關係1)使用時就[要判斷的型別值].constructor === [需要驗證的類]
,比如2)原理也是通過原型鏈,我們知道原型prototype
上都有乙個constructor
屬性指向其建構函式。所以例項獲取constructor
時,自身沒有這個屬性,向原型上找然後比對3)問題也一樣,無法判斷基本型別值4. 使用object的tostring方法來判斷1)使用時object.prototype.tostring.call(需要判斷的值)
,比如2)通過call
來改變object
的tostring
方法的this
指向,從而達到判斷型別的效果3)此方法即可以判斷值型別,也可以判斷引用型別值,比較常用4)我們日常開發可以用這個方法封裝乙個工具方法來使用/**
* @function istype 判斷資料型別
* @param data 需要檢測的資料
* @param type 期望資料型別
* @return 是否是期望資料型別
*/function
istype
(data, type)
;const name = object.prototype.tostring.
call
(data)
;const typename = typeobj[name]
||'unknown type'
;return typename === type;
}
js判斷資料型別的幾種方法
判斷js中的資料型別有一下幾種方法 typeof instanceof constructor prototype type jquery.type 接下來主要比較一下這幾種方法的異同。先舉幾個例子 var a iamstring.var b 222 var c 1,2,3 var d new da...
js獲取資料型別的幾種方法
js獲取資料型別的方法有一下幾種,1.typeof 2.object.prototype.tostring.call 3.instanceof運算子 下面開始介紹 typeof 可以 識別基本型別,但是無法區分array,regexp,物件 例子 typeof 1 返回numberobject.pr...
js判斷資料型別的幾種方法
1.typeof 鑑於 ecmascript 是鬆散型別的,因此需要有種手段來檢測給定變數的資料型別,typeof 就是負責提供這方面資訊的操作符。對乙個值使用 typeof 操作符可能返回下列某個字串 缺點 對於陣列和物件或null 都會返回object undefined 如果這個值未定義 bo...