林秀栋的技术博客

类数组对象(Array-like Object)和转换

类数组对象

类数组是有 length 属性,其他属性为非负整数的对象,不同的是类数组没有数组的方法,例如 push 等。

比如

let person = {
    0: "小明",
    1: "18",
    length: 2
};

常见的类数组对象

类数组对象和数组的区别:

类数组对象不能调用数组原型上的方法。比如:xx.push()、xx.slice()、xx.indexOf()。

类数组对象转为数组

Array.prototype.slice.call()

slice(start, end) 方法可从已有的数组中返回选定的元素。

start:必需。规定从何处开始选取。负数则为从数组尾部开始算起的位置。

end:可选。规定从何处结束选取。如果没有,则到数组结束。负数则为从数组尾部开始算起的位置。

为什么不直接用xx.slice()?

因为类数组对象xx没有数组的slice方法,需要用call。

Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换)

Array.from()

ES6语法,可将类数组对象或可遍历对象转换成真正的数组。