1.类数组定义
什么是类数组呢?查看 Lodash _.isArrayLike(value) 函数的实现,得知参数 value 须符合下列条件:
- 不是函数
- 有
length属性 - 且
length属性值是不大于Number.MAX_SAFE_INTEGER的自然数
字符串就符合这个条件,说明它就是类数组。
类数组是指在写法上跟数组一样,比如arguments,函数的第一个参数是argument[0],写法上跟数组一样,但是不是数组,他的原型是Object。
function functionName() {
console.log(arguments);
}
functionName(3, 5)
Arguments(2) [3, 5, callee: ƒ, Symbol(Symbol.iterator): ƒ]
0:3
1:5
callee:ƒ functionName()
length:2
Symbol(Symbol.iterator):ƒ values()
__proto__:Object
2.将类数组转化为数组 (1)对类数组进行遍历,放在一个空数组中;
(2)Array.from() Array.from()方法可以将任意具有length属性的对象转换成真正的数组(类数组有length属性) Array.from(arrayLike);arrayLike是类数组;
(3)通过 apply 调用数组的 concat 方法来实现转换 Array.prototype.concat.apply([], arrayLike);arrayLike是类数组;
(4)通过 call 调用数组的 splice 方法来实现转换
Array.prototype.splice.call(arrayLike, 0);
它返回的是数组,使用call或者apply指向伪数组
(5)通过 call 调用数组的 slice 方法来实现转换
Array.prototype.slice.call(arrayLike);