揭秘类数组对象:形似数组,超越数组!(上)

简介: 揭秘类数组对象:形似数组,超越数组!(上)

一、引言


介绍类数组对象的概念和特点


类数组对象是指在 JavaScript 中,具有类似于数组的行为和特征的对象。类数组对象通常有以下特点:

  1. 具有可用的数组方法:类数组对象可以调用数组方法,如 push()、pop()、shift()、unshift()、splice()、slice()、map()、filter() 等。


  1. 具有数组索引和长度:类数组对象可以像数组一样使用索引和长度属性,如 length。


  1. 具有类数组对象的值:类数组对象的值通常是一个对象,该对象具有可用的键和值。


  1. 具有动态特性:类数组对象可以动态地添加或删除元素,就像数组一样。


以下是一个示例,演示了类数组对象的概念和特点:

class MyArray {
 constructor() {
   this.items = [];
 }

 push(value) {
   this.items.push(value);
 }

 pop() {
   return this.items.pop();
 }

 get(index) {
   return this.items[index];
 }

 set(index, value) {
   this.items[index] = value;
 }

 length() {
   return this.items.length;
 }
}

const myArray = new MyArray();
myArray.push(1);
myArray.push(2);
myArray.push(3);
console.log(myArray.get(1)); // 输出 2
console.log(myArray.length()); // 输出 3
console.log(myArray.pop()); // 输出 3
console.log(myArray.length()); // 输出 2

在这个示例中,我们创建了一个名为 MyArray 的类数组对象,它具有类似于数组的属性和方法。我们可以使用数组方法来操作类数组对象,如 push()pop()length()


二、类数组对象的定义和特征


解释什么是类数组对象


在JavaScript中,类数组对象是指一个普通的对象,其所有属性的名称都是正整数,并且有一个对应的length属性,表示对象中属性的数量。虽然类数组对象不是由Array构造函数创建的,但它具有数组的一些行为,可以使用数组中的方法,例如slice()方法获取子数组,join()方法连接数组等。


类数组对象与数组的主要区别在于

  • 数组的属性名是从0开始的连续整数,并且具有一些特殊的方法
  • 而类数组对象的属性名可以是任意的正整数,并且没有专门的方法。


但是,类数组对象可以通过索引来访问,并且可以转换为数组。

在 JavaScript 中,有许多方法和操作与类数组对象有关,因此理解类数组对象的概念对于编程实践非常重要。


与数组的相似之处和区别


类数组对象和数组有以下相似之处和区别:


相似之处:

  1. 两者都可以通过索引访问元素
  2. 两者都有一个length属性,用于表示元素的数量


区别:

  1. 类数组对象是一个普通对象,而数组是由Array构造函数创建的特殊对象
  2. 类数组对象的元素可以是任何类型,而数组的元素只能是数字或字符串。
  3. 类数组对象没有专门的方法,例如push()pop()unshift()等,而数组有这些方法。
  4. 类数组对象可以通过Array.from()方法转换为数组,而数组不能转换为类数组对象。


总之,类数组对象和数组在一些方面具有相似的行为,但它们在本质上是不同的对象。在实际编程中,需要根据具体情况选择使用类数组对象还是数组。


示例说明类数组对象的常见用法


类数组对象指的是具有类似数组的特性,但并非真正的数组的对象。常见的类数组对象包括 arguments 对象、DOM 元素集合(比如通过 querySelectorAll 获取的结果)、字符串等。


类数组对象虽然没有数组的常用方法,但我们可以通过一些技巧来模拟数组的常见用法。下面是一些常见的类数组对象用法示例:


  1. 遍历方式:可以使用 for 循环、forEach 方法或者扩展运算符 ... 来遍历类数组对象。
const nodeList = document.querySelectorAll('div');
// for 循环
for (let i = 0; i < nodeList.length; i++) {
  console.log(nodeList[i]);
}

// forEach 方法
nodeList.forEach(item => {
  console.log(item);
});

// 扩展运算符
console.log([...nodeList]);


  1. 转为真正的数组:可以使用 Array.from 方法或者扩展运算符将类数组对象转换为真正的数组。
const nodeList = document.querySelectorAll('div');
const array1 = Array.from(nodeList);
const array2 = [...nodeList];


  1. 获取长度:可以通过 length 属性来获取类数组对象的长度。
const nodeList = document.querySelectorAll('div');
console.log(nodeList.length);


  1. 获取特定索引的值:可以通过下标来获取类数组对象中特定索引位置的值。
const nodeList = document.querySelectorAll('div');
console.log(nodeList[0]);

需要注意的是,类数组对象并没有数组的原生方法,比如 pushpopslice 等。如果我们希望使用这些方法,需要先将类数组对象转换为真正的数组,然后再进行操作。


三、创建类数组对象的方法


以下是三种创建类数组对象的方法示例:


  1. 使用数组构造函数:可以使用 Array() 构造函数来创建类数组对象。通过传递初始元素来初始化类数组对象。
let arrayLike = new Array('a', 'b', 'c');
console.log(arrayLike); 


  1. 使用对象字面量:可以使用对象字面量来创建类数组对象。通过定义属性和值来初始化类数组对象。
let arrayLike = { 0: 'a', 1: 'b', 2: 'c', length: 3 };
console.log(arrayLike); 


  1. 动态添加属性:可以使用循环动态添加属性来创建类数组对象。
let arrayLike = {};
for (let i = 0; i < 3; i++) {
  arrayLike[i] = 'a';
}
arrayLike.length = 3;
console.log(arrayLike); 


这些方法都可以用来创建具有类似数组行为的类数组对象。类数组对象具有 length 属性和索引访问的能力,但它们不是真正的数组,不具备数组的一些特有方法。在实际应用中,根据需求选择适合的方法来创建类数组对象。

相关文章
|
6月前
|
存储 Java 索引
JavaSE——数组(1/2)-数组的定义和访问(静态初始化数组、动态初始化数组、案例练习)
JavaSE——数组(1/2)-数组的定义和访问(静态初始化数组、动态初始化数组、案例练习)
47 7
|
7月前
|
JavaScript
类数组是什么
类数组是什么
31 0
|
7月前
|
JavaScript 前端开发 索引
往数组添加对象的方法
往数组添加对象的方法
37 0
|
7月前
|
JavaScript 前端开发 索引
数组相关方法
数组相关方法
42 0
|
7月前
|
JSON JavaScript 前端开发
揭秘类数组对象:形似数组,超越数组!(下)
揭秘类数组对象:形似数组,超越数组!(下)
|
7月前
|
存储 Java 索引
【Java数组】数组定义 | 初始化赋值 | 数组练习题
【Java数组】数组定义 | 初始化赋值 | 数组练习题
|
存储 索引
数组和对象有什么区别?
数组和对象有什么区别?
93 0
|
前端开发
数组常用的几个方法
数组常用的几个方法
51 0
|
存储 JavaScript 前端开发
什么是数组,什么是对象,他们的区别是什么
什么是数组,什么是对象,他们的区别是什么
71 0