1、 typeof
typeof操作符返回一個(gè)字符串,表示未經(jīng)計(jì)算的操作數(shù)的類型。
語(yǔ)法:typeof operand
看下面例子:
> typeof 1
output: "number"
> typeof '1'
output: "string"
> typeof true
output: "boolean"
> typeof null
output: "object"
> typeof undefined
output: "undefined"
> typeof []
output: "object"
> typeof function () {}
output: "function" // 一些瀏覽器會(huì)是 object
> typeof {}
output: "object"
> typeof Symbol()
output: "symbol"
由上可看,typeof很好用,但有缺陷,像null、數(shù)組都被判定為object。
null會(huì)被判斷為object跟JavaScript開始的設(shè)計(jì)有關(guān)具體解釋看這
那么,為什么數(shù)組被判定為object呢?其實(shí)與數(shù)據(jù)背景有關(guān):
JavaScript中有兩種數(shù)據(jù)類型:
1、原始數(shù)據(jù)類型:包括null,undefind,String,Boolean,Number和Object。
2、派生數(shù)據(jù)類型/特殊對(duì)象:包括Function,Array和RegExp。這些都是JavaScript中的“Object”派生而來(lái)的。
2、instanceof
instanceof運(yùn)算符用于檢測(cè)構(gòu)造函數(shù)的prototype屬性是否出現(xiàn)在某個(gè)實(shí)例對(duì)象的原型鏈上。即instanceof是用于判斷引用類型屬于哪個(gè)構(gòu)造函數(shù)的
語(yǔ)法:object instanceof constructor
留意語(yǔ)法中的 constructor
看下面例子:
> [] instanceof Array
output: true
> [] instanceof Object
output: true
> ({}) instanceof Object //一定要加原括號(hào),不然 {} 被認(rèn)為是語(yǔ)句會(huì)報(bào)錯(cuò)
output: true
> (function () {} ) instanceof Function
output: true
> (function () {} ) instanceof Object
output: true
> /\d/ instanceof RegExp
output: true
> /\d/ instanceof Object
output: true
// 特殊的
> class a {}
> class b extends a {
}
> const oB = new b()
> a instanceof Function
output: true
> b instanceof Function
output: true
> oB instanceof b
output: true
> oB instanceof a
output: true
> oB instanceof Object
output: true
3、封裝一個(gè)函數(shù)判斷數(shù)據(jù)類型
每個(gè)對(duì)象都有一個(gè)
toString方法,當(dāng)該對(duì)象被表示為一個(gè)文本值時(shí),或者一個(gè)對(duì)象以預(yù)期的字符串方式引用時(shí)自動(dòng)調(diào)用。如果此方法在自定義對(duì)象中未被覆蓋,toString()返回 "[object type]",其中 type 是對(duì)象的類型
封裝(返回結(jié)果根據(jù)自己決定是否返回小寫,跟.toLowerCase()來(lái)實(shí)現(xiàn)),以下結(jié)果首字母大寫:
const _toString = Object.prototype.toString
function type (param) {
const str = _toString.call(param)
return str.slice(8, str.length -1)
}
應(yīng)用:
> type(1)
output: "Number"
> type('1')
output: "String"
> type(null)
output: "Null"
> type(undefined)
output: "Undefined"
> type(true)
output: "Boolean"
> type(NaN)
output: "Number"
> type([])
output: "Array"
> type(Symbol())
output: "Symbol"
> type(function () {})
output: "Function"
> type(class a {})
output: "Function"
> type (new Set())
output: "Set"
> type (new Map())
output: "Map"
4、其他
- 判斷數(shù)組
Array.isArray(obj) 方法
參數(shù):obj為需要檢測(cè)的值。
返回值:如果值是Array,則為true; 否則為false