1. 程式人生 > 程式設計 >JS資料型別分類及常用判斷方法

JS資料型別分類及常用判斷方法

資料型別判斷的方法

在探索資料型別判斷方法的時候我們需要知道JS中有哪些資料型別:

我們可以把JS中資料型別分為兩類:

1.基本資料型別:Undefined、Null、Boolean、Number、String、Symbol(es6中新增)

2.引用型別(複雜資料型別):裡面包含 function、Array、Date 等

判斷資料型別的方法有幾種

1.typeof

我相信typeof這個判斷資料型別的方法是大家平常用的比較多的,閒話不多說,直接上程式碼:

console.log(typeof 1);//number
console.log(typeof 'hello');//string

console.log(typeof true);//boolean
console.log(typeof null);//object
console.log(typeof Symbol(1));//symbol
console.log(typeof undefined);//undefined
console.log(typeof function(){});//function
console.log(typeof []);//object
console.log(typeof {});//object

通過以上程式碼和輸出我們大概可以看出,typeof這個判斷能判斷出大部分的資料型別,但是基本型別中有null的型別被判斷為object

所以這個判斷還不是那麼精確,我們需要其它判斷方法

2.instanceof 用於檢測建構函式的 prototype 屬性是否出現在某個例項的原型鏈上

1.instanceof 左為例項,右為建構函式。即判斷左是不是右的例項物件。內部機制是通過原型鏈來判斷的

2.instanceof 可以精準判斷引用資料型別 Array,Function,Object,而基本資料型別不能被 instanceof 精準判斷,因為它本身不是一個例項物件

console.log(2 instanceof Number);//false
console.log(new Number(2) instanceof Number);//true

console.log('str' instanceof String); //false
console.log(new String('str') instanceof String); //true
console.log([] instanceof Array);//true
console.log([]instanceof Object);//true
console.log({} instanceof Object);//true
console.log({} instanceof Array);//false
console.log(function(){} instanceof Function); // true 

在以上程式碼中,我們可以看出這個判斷方法還是沒解決實際性的問題,比如我們想判斷null為null,所以接下來介紹一個精確的判斷方法

3.Object.prototype.toString.call()

1.使用 Object 物件的原型方法 toString,使用 call 改變 this 指向

見程式碼:

const a = Object.prototype.toString;
console.log(a.call(2)); // [object Number]
console.log(a.call(true)); // [object Boolean]
console.log(a.call('str')); // [object String]
console.log(a.call(Symbol())) // [object Symbol]
console.log(a.call([])); // [object Array]
console.log(a.call(function(){})); // [object Function]
console.log(a.call({})); // [object Object]
console.log(a.call(undefined)); // [object Undefined]
console.log(a.call(null)); // [object Null]
console.log(a.call(new Date())) // [object Date]
console.log(a.call(new Error())) // [object Error]
console.log(a.call(new RegExp())) // [object RegExp

見上面輸出可知,Object.prototype.toString.call()可以判斷出複雜型別中的Array,Function,Date等型別,所以我們知道,當我們需要判斷複雜型別時,或者判斷簡單資料型別中的null為null時我們可以用次方法,判斷簡單型別中的其他資料型別我們可以用typeof來判斷就可以

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。