初次遇到这个问题的时候,我当机立断的写下了 typeof a == array;
然而实际上这是错误的,typeof array的结果是object,typeof object的结果也是object。那么我们如何判断一个变量是否是数组那?
1. instanceof
var a = {
"name":'suonidfahao',
"job": 'webEnginner',
}
var b = [1,2,4,4];
console.log(a instanceof Array); //false
console.log(b instanceof Array); //true
instanceof详解请见:http://blog.csdn.net/qq_33619285/article/details/70142527
2.Array.isArray(ie9以上支持)
Array.isArray([1, 2, 3]); // true
Array.isArray({foo: 123}); // false
Array.isArray('foobar'); // false
Array.isArray(undefined); // false
3.原型链:constructor
var list = [1,2,3,4,5];
console.log(list.constructor === Array); //true
为什么 array.constructor 就等于 Array那?
我们换一种方式创建数组就明了;
var mylist = new Array(1,2);
// 所以有:
console.log( mylist.__proto__ === Array.prototype )
// 所以有:
console.log( mylist.__proto__.constructor === Array.prototype.constructor );
// 所以有:
console.log( mylist.__proto__.constructor === Array );
// 所以有:
console.log( mylist.constructor === Array );
4.array特征
function isArray(obj){
return obj && //排除 null , undefined
typeof obj ==='object' && //排除number, string,boolean
obj.propertyIsEnumerable(length); //排除object
//此处是 length 不是"length",没有引号
//当obj={length:22,.....}时,obj.propertyIsEnumerable("length")为true,
//但是obj.propertyIsEnumerable(length)依然是false;
}