1腻异、instanceof
instanceof
運算符用于檢驗構(gòu)造函數(shù)的prototype
屬性是否出現(xiàn)在對象的原型鏈中的任何位置进副,返回一個布爾值。
let a = []
a instanceof Array
//true
let b = {}
b instanceof Array
//false
instanceof
通過判斷某個數(shù)值是否出現(xiàn)在與其對應(yīng)的數(shù)據(jù)類型的原型鏈上來作為依據(jù)悔常,在大多數(shù)情況下是可以準(zhǔn)確判斷出一個值的數(shù)據(jù)類型是什么的影斑,但是我們要知道,prototype
屬性是可以被修改的机打,所以可能會出現(xiàn)第一次判斷為true
之后矫户,再修改了prototype
的值之后再去判斷,就會出現(xiàn)false
的情況
2残邀、construator
實例的構(gòu)造函數(shù)屬性constructor指向?qū)嵗旧斫粤桑敲赐ㄟ^constructor屬性也可以判斷是否為一個數(shù)組。
let a = [1,3,4];
a.constructor === Array;//true
以上2種方法芥挣,對于已知實例類型驱闷,可以很方便的進行判斷,需要注意的是空免,construator
和instanceof
一樣遗嗽,判斷會存在多個全局環(huán)境的問題,典型的就是iframe
標(biāo)簽會同時存在一個或者多個全局環(huán)境鼓蜒,會影響到這2種方法的判斷結(jié)果
3痹换、Object.prototype.String.call()
Object.prototype.toString().call()
可以獲取到對象的不同類型,例如
//檢驗是否為數(shù)組
let a = [1,2,3]
Object.prototype.toString.call(a) === '[object Array]';//true
//檢驗是否是函數(shù)
let b = function () {};
Object.prototype.toString.call(b) === '[object Function]';//true
//檢驗是否是數(shù)字
let c = 1;
Object.prototype.toString.call(c) === '[object Number]';//true
//檢驗是否為對象
let d = {};
Object.prototype.toString.call(d) === '[object Object]' //true
4都弹、Array.isArray()
Array.isArray() 用于確定傳遞的值是否是一個數(shù)組娇豫,返回一個布爾值。
let a = [1,2,3]
Array.isArray(a);//true
此方法是ES5提供的新方法畅厢,對于某些不支持ES5的瀏覽器可能就不使用冯痢,那么我們需要配合Object.prototype.toString.call()
對他進行封裝一下
function checkArray(arg){
if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
}