instanceof
判断
语法:
object instanceof constructor
说明:
instanceof
操作符用于判断 constructor的prototype
属性是否存在于object
的原型链上;也就是constructor.prototype 是否存在于 object的原型链上
用法:
var a = [];
a instanceof Array; // true
注意事项:
使用instanceof
在同一全局环境下进行判断不会有问题,当在多个窗口意味着多个全局环境,不同的全局环境拥有不同的全局对象,从而拥有《不同的内置类型构造函数
》,那么,判断出来的结果是不可预测的。
例如:有一个父页面,一个子页面,我在子页面中定义了一个array变量,然后将该变量传递到父页面中,在父页面中通过 array instanceof Array
来判断该array变量是否属于Array,则有可能出错,因为子页面中定义的array变量的构造函数可能已经被更改了,并不是父页面中的Array函数,因此要特别注意;
使用Array.isArray()
来判断
这是ES5新添加的方法,支持的浏览器有:IE9+, FF4+, safari 5+, opera10.5+,chrome;
解决兼容性问题
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));
同时可以引申出检查《原生》对象、函数正则的方法:
// 检查对象
function isObject(o) {
return Object.prototype.toString.call(o) === '[object Object]';
}
// 检查函数
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 判断变量是否是数组(Array)](https://segmentfault.com/a/1190000004479306)
网友评论