typeof
是JavaScript非常常見的一個判斷數(shù)據(jù)類型的api肚逸,但是如果你經(jīng)常用它,肯定有遇到過問題膝晾,比如說,判斷一個值是不是數(shù)組類型Array
血当,這個時候,你的typeof
就會返回一個object
油湖,而不是你期望中的array
巍扛。
那么撤奸,究竟如何才能準(zhǔn)確的去判斷數(shù)據(jù)類型呢?
先上代碼:
var o = {}
var a = []
var b = true
var s = ''
var n = 1
var N = null
var u = undefined
var f = function(){}
var S = Symbol(1)
var toString = Object.prototype.toString
console.log(
toString.call(o),
'\n' + toString.call(a),
'\n' + toString.call(b),
'\n' + toString.call(s),
'\n' + toString.call(n),
'\n' + toString.call(N),
'\n' + toString.call(u),
'\n' + toString.call(f),
'\n' + toString.call(S),
)
很簡單胧瓜,用Object.prototype.toString.call()
就能得到最準(zhǔn)確的數(shù)據(jù)類型府喳。那么這是為什么呢?
因為JavaScript中蘑拯,所有基礎(chǔ)數(shù)據(jù)類型都有私有的Class屬性,這個屬性可以用Object.prototype.toString
方法來獲取申窘,里面涉及到一些js的裝箱和拆箱的操作。