Skip to content

什么是伪数组(类数组)?

参考答案:

伪数组是指具有数组部分特性的对象,它可以像数组一样按索引访问元素和获取 length 属性,但本质上并不是 Array 实例,因而不具备数组的方法(如 pushpop 等)。

特点

  1. 具有 length 属性:伪数组对象包含一个 length 属性,表示其中的元素数量。
  2. 可以按索引访问:伪数组中的元素可以像数组一样通过索引访问,如 obj[0]obj[1] 等。
  3. 不继承数组的原型方法:伪数组不继承 Array.prototype 上的方法,因此无法直接调用数组的方法。

常见的伪数组对象

在 JavaScript 中,常见的伪数组包括:

  • arguments 对象:在函数中,可以通过 arguments 访问传入的参数,arguments 是伪数组。
  • DOM 方法返回的 NodeListHTMLCollection:例如 document.querySelectorAll() 返回的结果就是 NodeList,属于伪数组。
  • 字符串:严格来说,字符串也具有伪数组特性,因为它们支持按索引访问和 length 属性。

转换伪数组为数组

因为伪数组没有数组的方法,通常需要将它们转换为真正的数组。常见的转换方法有以下几种:

  1. 使用 Array.from()

    javascript
    function example() {
      const argsArray = Array.from(arguments);
      console.log(argsArray); // [1, 2, 3]
    }
    example(1, 2, 3);
  2. 使用扩展运算符 ...

    javascript
    function example() {
      const argsArray = [...arguments];
      console.log(argsArray); // [1, 2, 3]
    }
    example(1, 2, 3);
  3. 使用 Array.prototype.slice.call()

    javascript
    function example() {
      const argsArray = Array.prototype.slice.call(arguments);
      console.log(argsArray); // [1, 2, 3]
    }
    example(1, 2, 3);

题目要点:

伪数组是指具有数组部分特性的对象,它可以像数组一样按索引访问元素和获取 length 属性,但本质上并不是 Array 实例,因而不具备数组的方法(如 pushpop 等)。

通过适当的转换,开发者可以像操作数组一样方便地使用这些数据。