檢測數據類型的6中方法
第一種:typeof 可以檢測一些基本的數據類型
語法:typeof 後面加不加括號都是可以用的
註意:正則、{}、[]、null輸出結果為object
所以這個方法並不是很好
例子:
console.log(typeof /\d/);//object console.log(typeof {});//object console.log(typeof []);//object console.log(typeof (null));//object console.log(typeof 123);//number console.log(typeof true);//boolean console.log(typeoffunction () {});//function console.log(typeof (undefined));//undefined
第二種:instanceof 檢測當前實例是否隸屬於某各類。
雙目運算符 a instanceof b ,判斷a的構造器是否為b,返回值為布爾值
例子:
1 function fn() {} 2 let f = new fn; 3 console.log(f instanceof fn);//true 4 console.log(f instanceof Object);//true 5 let arr = [1,2,3,4]; 6 console.log(arr instanceofArray);//true
第三種:constructor 構造函數
語法:實例.constructor
例子:
1 function fn() {} 2 let f = new fn; 3 console.log(f.constructor.name);//fn 4 console.log(fn.constructor);//Function(){} 5 console.log(Function.constructor);//Function(){}
第四種:hasOwnporperty 檢測當前屬性是否為對象的私有屬性
語法: obj.hasOwnporperty("屬性名/K值")
例子:
let obj = { name:"xx" }; console.log(obj.hasOwnProperty(‘name‘));//true console.log(obj.hasOwnProperty(‘xxxx‘));//false
第五種:is Array 判斷是否為數組
例子:
console.log(Array.isArray([]));//true console.log(Array.isArray(new Array()));//true
第六種:Object.portotype.toString (最好的)
語法:Object.prototype.toString.call([value])
獲取Object.portotype上的toString方法,讓方法的this變為需要檢測的數據類型值,並且讓這個方法執行
在Number、String、Boolean、Array、Function、RegExp...這些類的原型上都有一個toString方法:這個方法就是把本身的值轉化為字符串
(12).toString()//‘12‘ (true).toString()//‘true‘ [12,23].toString()//‘12.23‘
...
在Object這個類的原型上也有一個方法toString,但是這個方法並不是把值轉換成字符串,而是`返回當前值得所屬類詳細信息,固定結構:‘[object 所屬的類]‘`
1 var obj ={name:‘珠峰‘} 2 obj.toString()//[object Object]
調取的正是Object.prototype.toString方法
obj.toString()
首先執行Object.prototype.tostring方法
這個方法中的this就是我們操作的數據值obj
=>總結:Object.prototype.toString執行的時候返回當前方法中的this的所屬類信息
也就是,我想知道誰的所屬類信息,我們就把這個toString方法執行,並且讓this變為我們檢測的這個數據值,那麽方法返回的結果就是當前檢測這個值得所屬類信息
Object.prototype.toString()
({}).toString.call([value])
Object.prototype.toString.call(12)//[boject Number] Object.prototype.toString.call(true)//[boject Boolean]
......
"[object Number]"
"[object String]"
"[object Object]"
"[object Function]"
"[object Undefined]"
"[object Null]"
"[object RegExp]"
"[object Boolean]"
使用toString檢測數據類型,不管你是啥值,我們都可以正常檢測出需要的結果(這個方法檢測是`萬能`的)
話外:
1.Math是個對象,不是類。類才有prototype(原型)。`也就是說類都有原型:prototype,對象都有原型鏈:__proto__,函數既是類,也是對象,也是函數。`
2.如何把對象轉換成字符串?
對象下的toString方法是檢測數據類型的,而不是用來轉化成字符串的,這時可以用JSON的方法來轉化
1 let obj={name:‘朱軍林‘} 2 obj.toString()//=>"[object Object]" 3 4 5 JSON.stringify({name:‘朱軍林‘}) 6 "{"name":"朱軍林"}"
檢測數據類型的6中方法