js 數(shù)據(jù)類型判斷

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容