数组的理解 并且 如何判断一个对象是否是数组
这个问题看似简单,实际上不简单。
首先我们来了解一下数组
var arr = [1,2,3]
这里是字面量方法创建一个数组,相当于 var arr = new Array(), Array是构造函数/类,arr.__proto__ === Array.prototype, 像push()方法,其实是 Array.prototype.push(),所以说arr实例随想能访问到push()方法
像 Array.isArray() 是 Array这个构造函数自身的方法也就是静态方法,
var arr = [1, 2, 3];
上面这个arr对象,我们可以有很多办法判断它是不是数组
arr.constructor === Array; //true 通过构造函数判断 arr instanceof Array; //true 通过prototype判断 Array.isArray(arr); //true 通过Array类的静态方法判断 Object.prototype.toString.call(arr) === "[object Array]"; //true 通过toString方法判断
我们现在来创建一个不是数组的对象
var arr = [1, 2, 3]; var obj = Object.create(arr);
然后我们用上面3个方法判断一下
obj.constructor === Array; //true 通过构造函数判断 obj instanceof Array; //true 通过prototype判断 Array.isArray(obj); //false 通过Array类的静态方法判断 Object.prototype.toString.call(obj) === "[object Array]"; //false 通过toString方法判断
只有Array.isArray和toString方法可以正确判断,所以以后别再用其他方法了~