您的位置:首页 > Web前端 > JavaScript

JS如何判断一个变量是否为数组类型

2018-09-23 15:19 549 查看

参考博客:https://blog.csdn.net/lee_magnum/article/details/11555981

1、instanceof操作符

instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。

obj instanceof Object;     //true 实例obj在不在Object构造函数中

[code]var arr = [1,2,3,1];
alert(arr instanceof Array); // true

2、对象的constructor属性

[code]var arr = [1,2,3,1];
alert(arr.constructor === Array); // true

 第2种和第3种方法貌似无懈可击,但是实际上还是有些漏洞的,当你在多个frame中来回穿梭的时候,这两种方法就亚历山大了。由于每个iframe都有一套自己的执行环境,跨frame实例化的对象彼此是不共享原型链的,因此导致上述检测代码失效! 

3、Object.prototype.toString

[code]function isArrayFn (o) {
return Object.prototype.toString.call(o) === '[object Array]';
}
var arr = [1,2,3,1];

alert(isArrayFn(arr));// true

 call改变toString的this引用为待检测的对象,返回此对象的字符串表示,然后对比此字符串是否是'[object Array]',以判断其是否是Array的实例。

4.Array.isArray()   

ECMAScript5将Array.isArray()正式引入JavaScript,目的就是准确地检测一个值是否为数组。IE9+、 Firefox 4+、Safari 5+、Opera 10.5+和Chrome都实现了这个方法。但是在IE8之前的版本是不支持的。 

[code]var arr = [1,2,3,1];
var arr2 = [{ abac : 1, abc : 2 }];

function isArrayFn(value){
if (typeof Array.isArray === "function") {
return Array.isArray(value);
}else{
return Object.prototype.toString.call(value) === "[object Array]";
}
}
alert(isArrayFn(arr));// true
alert(isArrayFn(arr2));// true

 

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: