instanceof
判斷
語(yǔ)法:
object instanceof constructor
說(shuō)明:
instanceof
操作符用于判斷 constructor的prototype
屬性是否存在于object
的原型鏈上鬼吵;也就是constructor.prototype 是否存在于 object的原型鏈上
用法:
var a = [];
a instanceof Array; // true
注意事項(xiàng):
使用instanceof
在同一全局環(huán)境下進(jìn)行判斷不會(huì)有問(wèn)題斯棒,當(dāng)在多個(gè)窗口意味著多個(gè)全局環(huán)境,不同的全局環(huán)境擁有不同的全局對(duì)象耍休,從而擁有《不同的內(nèi)置類(lèi)型構(gòu)造函數(shù)
》,那么,判斷出來(lái)的結(jié)果是不可預(yù)測(cè)的。
例如:有一個(gè)父頁(yè)面甜紫,一個(gè)子頁(yè)面,我在子頁(yè)面中定義了一個(gè)array變量骂远,然后將該變量傳遞到父頁(yè)面中囚霸,在父頁(yè)面中通過(guò) array instanceof Array
來(lái)判斷該array變量是否屬于Array,則有可能出錯(cuò)激才,因?yàn)樽禹?yè)面中定義的array變量的構(gòu)造函數(shù)可能已經(jīng)被更改了拓型,并不是父頁(yè)面中的Array函數(shù),因此要特別注意瘸恼;
使用Array.isArray()
來(lái)判斷
這是ES5新添加的方法劣挫,支持的瀏覽器有:IE9+, FF4+, safari 5+, opera10.5+,chrome;
解決兼容性問(wèn)題
if(!Array.isArray){
Array.isArray = function(arg){
return Object.prototype.toString.call(arg)==='[object Array]'
}
}
使用Object.prototype.toString.call(arr)
(最推薦)
var ary = [1,23,4];
function isArray(o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
console.log(isArray(ary));
同時(shí)可以引申出檢查《原生》對(duì)象东帅、函數(shù)正則的方法:
// 檢查對(duì)象
function isObject(o) {
return Object.prototype.toString.call(o) === '[object Object]';
}
// 檢查函數(shù)
function isFunction(o) {
return Object.prototype.toString.call(o) === '[object Function]';
}
// 檢查正則
function isRegExp(o) {
return Object.prototype.toString.call(o) === '[object RegExp]';
}
參考:
- [instanceof用法](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof)
- [javascript 判斷變量是否是數(shù)組(Array)](https://segmentfault.com/a/1190000004479306)