JavaScript有三種方法机隙,可以確定一個(gè)值到底是什么類(lèi)型。
-
typeof
運(yùn)算符 -
instanceof
運(yùn)算符 -
Object.prototype.toString
方法
typeof 運(yùn)算符
最常用的是 typeof
運(yùn)算符萨西,返回一個(gè)值的數(shù)據(jù)類(lèi)型有以下幾種結(jié)果有鹿。
- 原始類(lèi)型
- 函數(shù)
- undefined
- object
1.原始類(lèi)型
數(shù)值、字符串谎脯、布爾值分布返回 number
葱跋、string
、boolean
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
2.函數(shù)
函數(shù)返回function
function f() {}
typeof f
// "function"
3. undefined
undefined
和沒(méi)有用 var
聲明的變量,用typeof
返回的是 undefined
typeof undefined
// "undefined"
var x
typeof x
// "undefined"
y
// ReferenceError: y is not defined
typeof y
// "undefined"
這里y
沒(méi)有用var
聲明娱俺,直接使用就會(huì)報(bào)錯(cuò)稍味,但是用typeof
就不報(bào)錯(cuò),而是返回undefined荠卷。
實(shí)際編程中模庐,這個(gè)特點(diǎn)通常用在判斷語(yǔ)句。
// 錯(cuò)誤的寫(xiě)法
if (v) {
// ...
}
// ReferenceError: v is not defined
// 正確的寫(xiě)法
if (typeof v === "undefined") {
// ...
}
4.object
除了以上三種情況油宜,其他情況都返回object
掂碱。
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
注意
- 空數(shù)組
[]
的返回值是object
,這表示慎冤,JavaScript內(nèi)部疼燥,數(shù)組本質(zhì)上是一種特殊的對(duì)象。 -
null
的返回值是object
蚁堤,這是由于歷史原因造成的醉者,1995年JavaScript語(yǔ)言的第一版,所有值都設(shè)計(jì)成32位违寿,其中最低的3位用來(lái)表述數(shù)據(jù)類(lèi)型湃交,object對(duì)應(yīng)的值是000。當(dāng)時(shí)藤巢,只設(shè)計(jì)了五種數(shù)據(jù)類(lèi)型(對(duì)象搞莺、整數(shù)、浮點(diǎn)數(shù)掂咒、字符串和布爾值)才沧,完全沒(méi)考慮null,只把它當(dāng)作object的一種特殊值绍刮,32位全部為0温圆。這是typeof null返回object的根本原因。
為了兼容以前的代碼孩革,后來(lái)就沒(méi)法修改了岁歉。這并不是說(shuō)null就屬于對(duì)象,本質(zhì)上null是一個(gè)類(lèi)似于undefined的特殊值膝蜈。
instanceof 運(yùn)算符
instanceof
是判斷變量是否為某個(gè)對(duì)象的實(shí)例锅移,返回值為true
或false
。
var o = {};
var a = [];
o instanceof Array // false
a instanceof Array // true
a instanceof Object // true
typeof
對(duì)數(shù)組 []
和對(duì)象 {}
的返回值都是Object
饱搏,無(wú)法區(qū)分?jǐn)?shù)組和對(duì)象非剃,但是instanceof
可以區(qū)分。
注意: 數(shù)組Array
是對(duì)象Object
的一個(gè)子類(lèi)推沸,所以 a instanceof Object
的返回值是 true
备绽。