类数组 - [ Array-like ] : objects
1. what's Array-like
类数组和数组很像,但是数组的很多方法却不能用,这就很尴尬了~
像 arguments、nodelist 等这些数据有序集合,有长度和下标等属性,但却不是 Array. 这就是所谓的 Array-like(类数组/伪数组)。对于 Array-like 我们可以用跨原型链来操作,eg :Array.prototype.slice.call(arguments, 0); 这也是把 Array-like 转化成 Array 的方法哦。
2. 自己构造 Array-like
就是添加 Array 的原生方法到 自己创建的 Object 里。
如果不给 a 添加 length 属性。push 的时候会把 a[0] 和 a[1] 覆盖掉。
3. 如何判断是不是 Array
typeof去判断数组得到的结果是 ‘object’,所以很多 LIB 都采用了 duck typing(鸭子类型检测)的方式,它的判断条件是: 当对象的 length 属性是一个数字,并且 splice 属性是一个 function, 那么这个对象就是数组。