js判斷數據類型的四種方法

1.typeof方法


//1.
console.log(typeof(a));//undefined
console.log(typeof(undefined));//undefined
//2.
console.log(typeof(1));//number
console.log(typeof(NaN));//number
//3.
console.log(typeof(function(){}));//function
//4.
console.log(typeof(''));//string
//5.
console.log(typeof(true));//boolean
//6.
console.log(typeof({}));//object
console.log(typeof(new Object));//object
console.log(typeof([]));//object
console.log(typeof(null));//object
console.log(typeof(/\W/));//object
console.log(typeof(new Date));//object

  

總結:

一、typeof的值有6個,分別是undefined、number、function、string、boolean、object數組

二、引用類型(Object、Array、function、Date)除了函數,值都爲object函數

2.Object.prototype.toString.call方法


//1.
console.log(Object.prototype.toString.call(1));//[object Number]
console.log(Object.prototype.toString.call(NaN));//[object Number]
//2.
console.log(Object.prototype.toString.call(function(){}));//[object Function]
//3.
console.log(Object.prototype.toString.call(''));//[object String]
//4.
console.log(Object.prototype.toString.call(true));//[object Boolean]
---------------------------------------
//5.
console.log(Object.prototype.toString.call({}));//[object Object]
console.log(Object.prototype.toString.call(new Object));//[object Object]
//6
console.log(Object.prototype.toString.call([]));//[object Array]
//7
console.log(Object.prototype.toString.call(null));//[object Null]
//8
console.log(Object.prototype.toString.call(/\W/));//[object RegExp]
//9
console.log(Object.prototype.toString.call(new Date));//[object Date]>
tip:若是想讓Object.prototype.toString.call輸出的值與typeof輸出的值格式相同,可先用spilt分割成數組,而後去數組的第1個索引值,再用splice方法刪除最後一位便可

以下:

console.log(Object.prototype.toString.call({}).split(" ")[1].substring(0,Object.prototype.toString.call({}).split(" ")[1].length-1));//Array

總結:

一、Object.prototype.toString.call的值有9個,分別是Number、Function、String、Boolean、Object、Array、Null、RegExp、Date。prototype

用Object.prototype.toString.call而不用 toString的緣由

一、toString爲Object的原型方法,用Array ,function等類型做爲Object的實例,都重寫了toString方法。
二、不一樣的對象類型調用toString方法時,調用的是對應的重寫以後的toString方法,而不會去調用Object上原型toString方法,因此採用obj.toString()不能獲得其對象類型,只能將obj轉換爲字符串類型。code

3.constructor/instanceof方法


用法example:

console.log([].constructor == Array);//true
console.log({}.constructor == Array);//false
console.log([] instanceof Array);//->true
console.log({} instanceof Array);//->false 

總結:

一、侷限性:

用instanceof檢測的時候,只要當前的這個類在實例的原型鏈上(能夠經過原型鏈__proto__找到它),檢測出來的結果都是true對象

二、基本數據類型的值是不能用constructor/instanceof來檢測的

console.log(1 instanceof Number);//false
console.log([].constructor == Number);//false
相關文章
相關標籤/搜索