之前遇到不少类似的问题,但有时会弄混,今天总结下js判断一个变量是否是数组的方法如下
1.typeof
var array = [1,2,3,4,5,6];
console.log(typeof array); // 输出‘object’
tips:很明显,typeof只能检测基本数据类型,并不能检测出来是否为数组。
2.instanceof
var array = [1,2,3,4,5,6];
console.log(array instanceof Array); //输出true
tips:要求变量必须在当前页面声明。
3.原型链:constructor
var array = [1,2,3,4,5,6];
console.log(array.__proto__.constructor==Array); //输出true
console.log(array.constructor==Array) //输出true
tips:两种方法都一样,但是在IE中“_proto_”没有定义。这种方法也存在和“instanceof”一样的问题,必须先声明变量。
4.利用Object.prototype.toString.call()
var array = [1,2,3,4,5,6];
console.log(Object.prototype.toString.call(array)) //输出"[object Array]"
封装成一个函数。
var array = [1,2,3,4,5,6];
function isArray(o){
return Object.prototype.toString.call(o)=='[object Array]';
}
console.log(isArray(array));
5、利用Array.isArray(),(支持ie9以上)
var array = [1,2,3,4,5,6];
var obj={a:1,b:[1,2,3],c:'test'};
console.log(Array.isArray(array));//true
console.log(Array.isArray(obj));//false
以上,一些个人总结的方法。