伪数组转化为真数组详解

发布时间:2023-05-21

一、什么是伪数组

伪数组指的是长得像数组,但实际上不是真正的数组,它们是由argumentsDOM集合NodeList等对象提供的。这些对象只支持一部分数组方法,无法使用数组的全部属性和方法。

二、为什么需要把伪数组转化为真数组

在JavaScript编程中,我们通常需要使用数组来存储和操作数据,而某些情况下我们只能使用伪数组,这时就需要把伪数组转化为真数组,以便于使用数组的全部属性和方法。

三、如何将伪数组转化为真数组

1.使用Array.from方法

const fakeArray = {
  0: 'a',
  1: 'b',
  2: 'c',
  length: 3
};
const realArray = Array.from(fakeArray);
console.log(realArray); // ["a", "b", "c"]

我们可以使用Array.from()方法将伪数组转化为真数组,这个方法可以接收一个类数组对象、可迭代对象等,返回一个新的真实数组。

2.使用Array.prototype.slice方法

const fakeArray = {
  0: 'a',
  1: 'b',
  2: 'c',
  length: 3
};
const realArray = Array.prototype.slice.call(fakeArray);
console.log(realArray); // ["a", "b", "c"]

我们也可是使用Array.prototype.slice.call()方法将伪数组转化为真数组,这个方法将原本只能操作数组的Array.prototype.slice()方法的this指针指向伪数组对象。

3.使用展开运算符

const fakeArray = {
  0: 'a',
  1: 'b',
  2: 'c',
  length: 3
};
const realArray = [...fakeArray];
console.log(realArray); // ["a", "b", "c"]

我们还可以使用ES6新增的展开运算符...将伪数组转化为真数组,将伪数组对象作为展开运算符的参数,就可以直接转化为真正的数组。

四、扩展:伪数组和真数组的区别

伪数组通过Object对象模拟数组,它们和真数组有一些区别:

  • 拥有一部分数组属性和方法,无法使用数组的全部属性和方法;
  • 无法使用数组字面量表达式创建,只能手动构造;
  • 原型链不同,伪数组原型链中没有Array而是Object。 总之,伪数组只是长得像数组,表现出一些类似数组的行为和特征,但它们不完全满足数组的特征,无法完全代替真数组。