前言
專案中我們肯定需要處理各種資料,這時候就要判斷資料的型別來確定下一步的操作
typeof
常用于判斷基本資料型別,在基本資料型別中會又一個例外就是typeof null是Object型別
如果用typeof來判斷物件,只有typeof function能判斷出是function型別,其他的物件型別如Array,RegExp都會判斷為Object
所以我們我們在使用typeof時最好只用于判斷基本資料型別,還要排除null.專案中如果我們一直資料型別在Boolean,String,Number這幾個時才推薦使用Object
instanceof
instanceof就是通過判斷物件的原型璉中是否存在建構式的prototype來判斷型別, a instanceof b,就是判斷a的原型璉上是否有b.prototype
基本型別的建構式有Number,Boolean,String,Null,Undefined,Symbol
復雜型別的建構式有Object,Array,Function,RegExp,Date..
注意
instanceof的左邊資料必須是物件型別,如果是基本型別是一定回傳false的,就像下面這種情況,通過new后num不再是基本型別
let num = 1
num.__proto__ === Number.prototype // true
num instanceof Number // false
num = new Number(1)
num.__proto__ === Number.prototype // true
num instanceof Number // true
instanceof檢測資料型別也不是完美的,真正完美的檢測型別請看下面
Object.prototype.toString.call()
開發中推薦使用這個方法來判斷型別,這個方法是真正可以判斷出所有資料型別的方法
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(“abc”);// "[object String]"
Object.prototype.toString.call(123);// "[object Number]"
Object.prototype.toString.call(true);// "[object Boolean]"
**函式型別**
Function fn(){
console.log(“test”);
}
Object.prototype.toString.call(fn); // "[object Function]"
**日期型別**
var date = new Date();
Object.prototype.toString.call(date); // "[object Date]"
**陣列型別**
var arr = [1,2,3];
Object.prototype.toString.call(arr); // "[object Array]"
**正則運算式**
var reg = /[hbc]at/gi;
Object.prototype.toString.call(reg); // "[object RegExp]"
**自定義型別**
function Person(name, age) {
this.name = name;
this.age = age;
}
var person = new Person("Rose", 18);
Object.prototype.toString.call(arr); // "[object Object]"
var isNativeJSON = window.JSON && Object.prototype.toString.call(JSON);
console.log(isNativeJSON);// 輸出結果為”[object JSON]”
總結
專案開發中推薦Object.prototype.toString.call()來判斷資料型別,該方法涵蓋了我們能遇到的幾乎所有型別
參考網站
https://www.cnblogs.com/lmsblogs/p/11280821.html
https://www.imooc.com/article/69870
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/170814.html
標籤:JavaScript
下一篇:Vue-Cli 指南
