在JavaScript中,类数组和数组是两个不同的概念,同时也是需要区分清楚的。
数组我们都了解,是JavaScript中的一个引用类型,那类数组是什么呢?
类数组和数组之间的区别
- 类数组拥有length属性和索引,是object;
- 类数组不具有数组所具有的方法;
- 例如内置对象arguments、DOM方法返回的结果都是类数组;
类数组和数组相互转换
数组转换为类数组
数组转换成类数组,即将数组类型转换成Object类型,调用数组的原生push方法,同时通过apply改变this的执行,将this改为obj,传入数组arr。
var arr = [1, 2, 3, 4];
var obj = { };
[ ].push.apply(obj, arr);
console.log(obj);
类数组转换为数组
-
Array.prototype.slice.call(arrayLike)
调用Array原型上的slice方法,由于slice返回一个Array类型,通过call改变this指向,指向类数组,最后返回Array类型,不传递参数即整个返回;
function test(){
return Array.prototype.slice.call(arguments);
}
-
[…arrayLike]
使用拓展运算符将类数组改为数组;
function test(){
return [...arguments];
}
-
Array.from()
使用ES6中的新特效,将类数组转换成数组类型;
function test(){
return Array.from(arguments);
}