js 数据类型_js中检测数据类型的方法汇总
回顧一下js中數據類型分為兩大類,基礎類型和引用數據類型,主要有:
基本數據類型
- Number
- String
- Boolean
- Null
- Undefined
- Symbol
復雜數據類型
- Array
- Function
- Object
檢測js中的數據類型常用的方法有:
對比一下這三種方法的優缺點:
typeof方法
typeof?5 // number 有效typeof?'dsd' // string 有效typeof?true // boolean 有效typeof?undefined // undefined 有效typeof?function(){} // function 有效typeof?null // object 無效typeof?[] // object 無效typeof?{} // object 無效從以上例子中可以看到:
- typeof 用來檢測基本數據類型,除了Null無效外,其他都能返回正確的結果;
- 但引用類型,除了function外,其他引用類型一律都返回object結果。
Note:這在需要對數據結構進行詳細劃分的時候就不適用,比如說你要明確區分數組和對象,然后進行處理的時候,typeof就完全達不到效果
好處:檢測快捷方便
壞處:不能檢測更為準確的數據類型,如Array、Object、Null
instanceof
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確實可以檢測部分引用數據類型
- []是Array的實例,也是Object的實例
模擬instanceof的檢測過程
instanceof (A, B) = { var?L = A.__proto__; var?R = B.prototype; if(L === R) { return?true; // A的內部屬性 __proto__ 指向 B 的原型對象 } return?false;}instanceof 只能用來判斷兩個對象是否屬于實例關系, 而不能判斷一個對象實例具體屬于哪種類型。
由此可見instanceof在有些場景下依然不能滿足檢測具體類型的需求。
toString
toString是Object的原型方法。調用該方法默認返回當前對象的[[class]]
這是一個內部屬性,其格式為 [object Xxx] ,其中 Xxx 就是對象的類型。
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) { const typeObj =?Object.prototype.toString.call(value) return?typeObj.slice(8, -1)}同時,Array對象提供isArray方法來檢測數據是否為數組對象
Array.isArray([1,2,4]) // trueArray.isArray({foo: 'abc'}) // false該方法用來檢測數組類型也是非常方便的。
喜歡的話,公眾號記得關注哦,不定時更新前端小技巧哦!!
總結
以上是生活随笔為你收集整理的js 数据类型_js中检测数据类型的方法汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 编程该看那些书籍_我用py
- 下一篇: vrml场景实例代码_高并发的中断下半部