js資料型別檢測的幾種方法的原理及其優缺點

2021-10-10 14:28:51 字數 2654 閱讀 2501

js資料型別檢測的幾種方法的原理及其優缺點

在日常開發中總是會用到型別檢測,今天就總結一下常用的型別檢測方法

1.typeof (檢測基本型別值)

1) 使用時直接typeof要檢測的型別值,比如

2)typeof可以檢測numberstringbooleannullundefinedsymbolbigint這些基本型別值

3)對於引用型別只可以檢測出object(包括不同物件、陣列、正則、日期等等)、function也就是說不管物件型別具體為什麼型別都顯示為object比如:

4)關於typeof的一些細節: 返回的結果都是字串,還有對於null的檢測結果也為object

2.instanceof(可用來檢測具體物件型別)

1)使用時[要檢測的資料] instanceof [要驗證的物件型別]比如

2)返回乙個boolean資料,來判斷是否屬於資料該類

3)原理就是通過原型鏈來判斷例項的__proto__是否與檢測型別的prototype一致,比如

可以看到陣列檢測object也為true,其實就是根據原型鏈迴圈的比對就像如下

4)關於instanceof的細節問題

instanceof無法檢測基本型別值,比如乙個numberstring等,如下所示

除非是number類的例項

3.通過constructor判斷例項個類的關係

1)使用時就[要判斷的型別值].constructor === [需要驗證的類],比如

2)原理也是通過原型鏈,我們知道原型prototype上都有乙個constructor屬性指向其建構函式。所以例項獲取constructor時,自身沒有這個屬性,向原型上找然後比對

3)問題也一樣,無法判斷基本型別值

4. 使用object的tostring方法來判斷

1)使用時object.prototype.tostring.call(需要判斷的值),比如

2)通過call來改變objecttostring方法的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...