类数组与数组

101 阅读1分钟

1.类数组定义 什么是类数组呢?查看 Lodash _.isArrayLike(value) 函数的实现,得知参数 value 须符合下列条件:

  1. 不是函数
  2. length 属性
  3. 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
    calleefunctionName()
    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);