1. 程式人生 > >檢測數據類型的6中方法

檢測數據類型的6中方法

為我 array style 是我 cto 返回值 而不是 ceo pro

第一種: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(typeof
function () {});//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 instanceof
Array);//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中方法