檢測數據類型的方法

面試題中常常會考 js 數據類型檢測,今天我來分享一下 js 中經常使用的幾種方法來判斷數據類型,歡迎指點更正。 廢話很少說,直入正題。前端

數據類型分爲如下兩種 :面試

一、基本數據類型數組

String、 Number、 Boolean、 Symbol、 Undefined、 Null學習

二、引用數據類型prototype

Object、 Function、 Array、 Date...指針

基本類型也稱爲簡單類型,指的是不一樣變量會分配不一樣的存儲空間,爲了便於提高變量查詢速度,將其存儲在棧中。code

引用類型也稱爲複合類型,因爲其值的大小會改變,將值存儲在堆中。對象

怎麼檢測數據類型呢 ?原型鏈

1、typeof 檢測數據類型的運算符原型

console.log(typeof ''); //string

console.log(typeof 1); //number

console.log(typeof Symbol()); //symbol

console.log(typeof true); //boolean

console.log(typeof new Function()); //function

console.log(typeof undefined); //undefined

console.log(typeof {}); //object

console.log(typeof null); //object 無效

console.log(typeof []); //object 無效

console.log(typeof new Date()); //object 無效

console.log(typeof new RegExp()); //object 無效

經過以上輸出結果,能夠看到 :

對於基本類型,除 null 之外,都可以返回正確的結果。

對於引用類型,除 function 之外,一概返回 object 類型。

對於 null ,返回 object 類型。

對於 function 返回 function 類型。

侷限性 :

一、由於 null 值表示一個空對象指針,因此這也正是使用 typeof 操做符檢測 null 值時會返回 "object" 的緣由,其實 null 的數據類型是 Null ;

一、引用類型中的 數組、日期、正則 也都有屬於本身的具體類型 ; 而 typeof 對於這些類型的處理,只返回了處於其原型鏈最頂端的 Object 類型。

2、instanceof 檢測某一個實例是否屬於某個類

主要用來彌補 typeof 不能檢測具體屬於哪一個對象的侷限性。

console.log("1" instanceof String); //false

console.log(1 instanceof Number); //false

console.log(true instanceof Boolean); //false

console.log(null instanceof Object); //false

console.log(undefined instanceof Object); //false

console.log([] instanceof Array); //true

console.log(function(){} instanceof Function); //true

console.log({} instanceof Object); //true

侷限性:

一、不能用於檢測和處理字面量方式建立出來的基本數據類型值,即基本數據類型。

二、instanceof的特性:只要在當前實例的原型鏈上的對象,咱們用其檢測出來都爲true。

3、Object.prototype.toString.call() 原型鏈上的Object對象的toString方法

返回值的類型爲string類型,是最全面也是最經常使用的檢測數據類型的方式。

Object.prototype.toString.call('') ; // [object String]

Object.prototype.toString.call(1) ; // [object Number]

Object.prototype.toString.call(true) ; // [object Boolean]

Object.prototype.toString.call(Symbol()) ; //[object Symbol]

Object.prototype.toString.call(undefined) ; // [object Undefined]

Object.prototype.toString.call(null) ; // [object Null]

Object.prototype.toString.call(new Function()) ; // [object Function]

Object.prototype.toString.call(new Date()) ; // [object Date]

Object.prototype.toString.call([]) ; // [object Array]

Object.prototype.toString.call(new RegExp()) ; // [object RegExp]

Object.prototype.toString.call(new Error()) ; // [object Error]

好了,今天就說到這裏,歡迎關注個人博客,一塊兒交流學習前端知識。

前端發展速度之快,只有不斷的學習積累,才能緊跟時代的步伐。

相關文章
相關標籤/搜索