JavaScript 数组是编程中最常用的数据结构之一,它提供了丰富的属性和方法,用于存储和操作有序的数据集合。本文将系统介绍 JavaScript 数组对象的三大属性和八大类方法,并通过示例代码和图表深入解析其用法和行为。


二、数组对象的三大属性

1. length 属性

length 属性表示数组中元素的个数。JavaScript 数组的 length 是动态的,可以随时修改。

var arr = [12, 23, 5, 3, 25, 98, 76, 54, 56, 76]; // 定义一个包含10个数字的数组
alert(arr.length); // 输出: 10

arr.length = 12; // 扩展数组长度
alert(arr.length); // 输出: 12
alert(arr[8]); // 输出: 56

arr.length = 5; // 截断数组
alert(arr[8]); // 输出: undefined(元素被丢弃)

arr.length = 10; // 恢复长度
alert(arr[8]); // 输出: undefined(无法恢复丢弃的元素)

🔍 隐式修改:访问或设置超出当前长度的索引会自动扩展数组:

arr[15] = 34; // 设置第16个元素
alert(arr.length); // 输出: 16

2. prototype 属性

prototype 允许为所有数组实例添加自定义方法:

// 定义求最大值的方法
function array_max() {
  var i, max = this[0];
  for (i = 1; i < this.length; i++) {
    if (max < this[i]) max = this[i];
  }
  return max;
}

Array.prototype.max = array_max; // 添加到原型
var x = new Array(1, 2, 3, 4, 5, 6);
var y = x.max(); // y = 6

3. constructor 属性

constructor 指向创建该数组的构造函数:

var arr = new Array();
if (arr.constructor === Array) {
  console.log("该对象是数组");
}

三、数组的八大操作方法

1. 创建数组

var arr1 = new Array();        // 空数组
var arr2 = new Array(5);       // 长度为5的数组
var arr3 = new Array(1, 2, 3); // 带初始值的数组

2. 访问元素

var value = arr[0]; // 获取第一个元素
arr[0] = 100;       // 修改第一个元素

3. 添加元素

// 在末尾添加
arr.push(6, 7);      // 返回新长度

// 在开头添加
arr.unshift(-1, 0);  // 返回新长度

// 在指定位置插入
arr.splice(2, 0, 99); // 从索引2插入99,删除0个元素

4. 删除元素

arr.pop();           // 删除最后一个元素
arr.shift();         // 删除第一个元素
arr.splice(1, 2);    // 从索引1开始删除2个元素

5. 截取与合并

var sub = arr.slice(1, 3); // 截取索引1到2的元素
var newArr = arr.concat([6, 7]); // 合并新数组

6. 拷贝数组

var copy1 = arr.slice(0);    // 浅拷贝
var copy2 = arr.concat();    // 浅拷贝
var deepCopy = JSON.parse(JSON.stringify(arr)); // 深拷贝(适用于简单数据)

7. 排序与反序

arr.reverse(); // 反序
arr.sort();    // 默认按字符串排序
arr.sort((a, b) => a - b); // 数字升序排序

8. 数组转字符串

var str = arr.join("|"); // 用"|"连接元素
console.log(arr.toString()); // 逗号连接的字符串

四、UML 关系图(Mermaid)

prototype
Array
-length: number
+push(...items)
+pop()
+shift()
+unshift(...items)
+slice(start?, end?)
+splice(start, deleteCount, ...items)
+concat(...items)
+reverse()
+sort(compareFn?)
+join(separator?)
+toString()
ArrayPrototype
+max()

五、单词表(用于学习参考)

单词/短语 音标 词性 词根/词缀 释义 搭配 例子
array /əˈreɪ/ noun - 数组 create an array let arr = new Array();
prototype /ˈproʊtətaɪp/ noun proto- + type 原型 prototype property Array.prototype.method
constructor /kənˈstrʌktər/ noun construct + -or 构造函数 constructor function new Array()
splice /splaɪs/ verb - 拼接 array.splice() arr.splice(1, 2)
concat /kənˈkæt/ verb con- + cat 连接 array.concat() arr.concat([1,2])
slice /slaɪs/ verb - 切片 array.slice() arr.slice(0, 2)
length /leŋθ/ noun long + -th 长度 array.length arr.length = 10
reverse /rɪˈvɜrs/ verb re- + verse 反转 array.reverse() arr.reverse()
sort /sɔrt/ verb - 排序 array.sort() arr.sort((a,b) => a-b)

七、总结

JavaScript 数组是灵活且强大的数据结构,通过其动态的 length 属性、可扩展的 prototype 和丰富的内置方法,开发者可以高效地处理数据集合。理解这些特性并熟练运用相关方法,是提升 JavaScript 编程能力的关键。

更多推荐