在 JavaScript 中,数组 不是基本类型,而是具有以下核心特征的 Array 对象:
- JavaScript 数组是可调整大小的,并且可以包含不同的数据类型。(当不需要这些特征时,可以使用类型化数组。)
- JavaScript 数组不是关联数组,因此,不能使用任意字符串作为索引访问数组元素,但必须使用非负整数(或它们各自的字符串形式)作为索引访问。
- JavaScript 数组的索引从 0 开始:数组的第一个元素在索引 0 处,第二个在索引 1 处,以此类推,最后一个元素是数组的 length 属性减去 1 的值。
- JavaScript 数组复制操作创建浅拷贝。(所有 JavaScript 对象的标准内置复制操作都会创建浅拷贝,而不是深拷贝)。
复制方法和修改方法
复制方法 不会修改调用该方法的现有数组,而是返回一个新的数组。它们通过首先构造一个新数组,然后填充元素来实现。复制始终是浅层次的——该方法从不复制一开始创建的数组之外的任何内容。原始数组的元素将按以下方式复制到新数组中:
- 对象:对象引用被复制到新数组中。原数组和新数组都引用同一个对象。也就是说,如果一个被引用的对象被修改,新数组和原数组都可以看到更改。
- 基本类型,如字符串、数字和布尔值(不是 String、Number 和 Boolean 对象):它们的值被复制到新数组中。
修改方法 会改变调用该方法的数组,在这种情况下,它们的返回值根据方法的不同而不同:有时是对相同数组的引用,有时是新数组的长度。
记住数组上的哪些操作会修改原始数组、哪些不会,这非常有帮助。例如,push、pop、reverse 和 sort 会改变原始数组,但 slice、filter 和 map 则会创建一个新数组。
常用属性和方法
length: 返回数组中的元素数量。
constructor: 指定创建数组原型的函数。
prototype: 允许你向数组的原型对象添加属性和方法。
Symbol.iterator: 返回用于迭代数组元素的迭代器对象。
concat(): 连接两个或多个数组并返回一个新数组。
join(): 将数组的所有元素连接成一个字符串。
push(): 将一个或多个元素添加到数组的末尾并返回数组的新长度。
pop(): 从数组中移除最后一个元素并返回该元素。
shift(): 从数组中移除第一个元素并返回该元素。
unshift(): 将一个或多个元素添加到数组的开头并返回数组的新长度。
slice(): 返回一个从开始到结束(不包括结束)选定的部分的浅拷贝。
splice(): 在指定的索引位置更改数组的内容,删除、替换或添加元素。
indexOf(): 返回元素在数组中第一次出现的索引,如果不存在则返回-1。
lastIndexOf(): 返回元素在数组中最后一次出现的索引,如果不存在则返回-1。
forEach(): 为数组中的每个元素执行提供的函数一次。
map(): 创建一个新数组,其中包含对数组中的每个元素调用提供的函数的结果。
filter(): 创建一个新数组,其中包含通过提供的函数实现的测试的所有元素。
reduce(): 将一个函数应用于累加器和数组中的每个元素,将其减少为单个值。
reduceRight(): 从右到左应用一个函数于累加器和数组的每个元素,将其减少为单个值。
sort(): 原地对数组的元素进行排序并返回排序后的数组。
reverse(): 原地反转数组中元素的顺序。
toString(): 返回表示指定数组及其元素的字符串。
toLocaleString(): 返回表示数组元素的本地化字符串。
includes(): 确定数组是否包含某个值。
some(): 检查数组中是否至少有一个元素满足提供的条件。
every(): 检查数组中是否所有元素都满足提供的条件。
find(): 返回满足提供的条件的数组中的第一个元素。
findIndex(): 返回满足提供的条件的数组中的第一个元素的索引。
fill(): 从开始索引到结束索引将数组中的所有元素填充为静态值。
copyWithin(): 将数组中的一系列元素复制到数组中的另一个位置。
flat(): 创建一个新数组,其中包含所有子数组元素递归连接到指定深度。
flatMap(): 使用映射函数映射每个元素并将结果展平到新数组中。
from(): 从可迭代对象或类似数组对象创建一个新的浅拷贝数组。
isArray(): 确定传递的值是否为数组。
of(): 创建一个包含可变数量元素的新数组。
keys(): 返回包含数组键的新数组迭代器。
values(): 返回包含数组值的新数组迭代器。
entries(): 返回包含数组键值对的新数组迭代器。
参考资料
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array