深刻理解JS數據類型檢測

JS 的數據類型

基本數據類型

number 、 string 、 boolean 、 null 、 undefined 、 symbol(ES6新增)數組

引用數據類型

Object ( Array 、 Date 、 RegExp ) 、 Function瀏覽器

檢測數據類型的4種方法

typeof 、 instanceof 、 constructor 、 Object.prototype.toString.call() 函數


typeof

typeof是用於檢測數據類型的一元運算符,與+ - * /同樣。prototype

檢測方法

typeof [value]3d

返回值

包含對應數據類型的字符串code

優缺點

優勢

  • 一元運算符使用簡單,優先級高

缺點

  • 引用數據類型檢測不許確,不能判斷出object中的對象、數組、時間、正則等方法
  • typeof null也爲object

小結:

被檢測的數據類型 檢測結果
Symbol "symbol"
Number "number"
Boolean "boolean"
Undefined "undefined"
Function "function"
Null "object"
Object "object"
Date "object"
RegExp "object"
Array "object"

instanceof

判斷當前實例是否屬於某個類,若是是則返回 true,不然返回 false。cdn

檢測方法

[example] instanceof [class]對象

返回值

布爾值blog

優缺點

優勢

  • 解決了typeof檢測引用數據類型不許確的問題

缺點

  • 不能用於處理字面量建立的基本數據類型
  • 凡是在原型鏈上的構造函數,instanceof的返回結果都是true
  • 不能檢測null和undefined

對於特殊的數據類型 null 和 undefined,他們的所屬類分別是 Null 和 Undefined,可是瀏覽器把這兩個類保護起來了,不容許在外面訪問使用。原型鏈


constructor

constructor 爲實例原型上的方法,指向它的構造函數。利用這一點,獲取某實例的constructor 屬性值,檢測是否爲所屬的類,從而進行數據類型檢測。

檢測方法

[example].constructor===[class]

返回值

布爾值

優缺點

優勢

  • 能夠檢測各類引用數據類型

缺點

  • null和 undefined 沒有constructor屬性,這兩種類型的數據須要經過其餘方式來判斷。
  • constructor可能由於被改寫而致使結果不許確

Object.propotype.toString.call()

檢測方法

Object.prototype.toString.call([value])

返回值

字符串,格式爲:[Object 當前被檢測實例所屬的類]

優缺點

優勢

  • 能檢測各類類型

缺點

  • 檢測結果須要進行「加工」。

封裝一個數據類型檢測的函數

思惟導圖

結語

以上就是本篇關於JS數據類型檢測的所有內容,若是有誤,歡迎指出。

相關文章
相關標籤/搜索