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

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

1、instanceof操作符

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

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

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

2、对象的constructor属性

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

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

3、Object.prototype.toString

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之前的版本是不支持的。 

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 

猜你喜欢

转载自blog.csdn.net/Judy_qiudie/article/details/82821051