数组的理解 并且 如何判断一个对象是否是数组

这个问题看似简单,实际上不简单。

首先我们来了解一下数组

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方法可以正确判断,所以以后别再用其他方法了~ 

原文地址:https://www.cnblogs.com/shun1015/p/14305603.html