在 js 中 Array 对象支持在单个变量名下存储多个元素,并具有执行常见数组操作的属性与方法。Array 不是基本类型,而是具有以下核心特征的 Array 对象:

  • JavaScript 数组是可调整大小的,并且可以包含不同的数据类型。
  • JavaScript 数组不是关联数组,因此,不能使用任意字符串作为索引访问数组元素,但必须使用非负整数(或它们各自的字符串形式)作为索引访问。
  • JavaScript 数组的索引从 0 开始,最后一个元素是数组的 length 属性减去 1 的值。
  • JavaScript 数组复制操作创建浅拷贝。

Array 的属性&方法

属性

  • Array.prototype.length: 设置或返回数组中元素的数目,值是一个 0 到 2^32 - 1 的整数。
  • get Array[@@species]: 访问器属性,返回数组的构造函数。
  • Array.prototype[@@unscopables]: 包含了所有 ES2015 (ES6) 之后新定义的、且并未被更早的 ECMAScript 标准收纳的方法名。这些方法被排除在由 with 语句绑定的环境中。

原型方法(实例方法)

改变原数组的方法

  • Array.prototype.unshift(): 将一个或多个元素添加到数组的开头,并返回该数组的新长度。
  • Array.prototype.shift(): 从数组中删除第一个元素,并返回该元素的值。
  • Array.prototype.push(): 将新元素添加到数组的最后,并返回数组的新长度值。
  • Array.prototype.pop(): 从数组中删除最后一个元素,并返回该元素的值。
  • Array.prototype.splice(start[, deleteCount[, item1[, item2[, ...]]]]): 通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。
  • Array.prototype.reverse(): 将数组中元素的位置颠倒,并返回该数组。
  • Array.prototype.sort([compareFunction]): 用原地算法对数组的元素进行排序,并返回该数组。
  • Array.prototype.fill(value[, start[, end]]): 用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。
  • Array.prototype.copyWithin(target[, start[, end]]): 浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度。

数组操作

  • Array.prototype.slice([begin[, end]]): 返回一个新的数组对象,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括 end)。
  • Array.prototype.join(separator): 将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符。
  • Array.prototype.concat(value1[, value2[, ...[, valueN]]]): 用于合并两个或多个数组。
  • Array.prototype.includes(valueToFind[, fromIndex]): 用来判断一个数组是否包含一个指定的值。
  • Array.prototype.indexOf(searchElement[, fromIndex]): 返回在数组中可以找到一个给定元素的第一个索引。
  • Array.prototype.lastIndexOf(searchElement[, fromIndex]): 返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引。
  • Array.prototype.flat([depth]): 按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回。
  • Array.prototype.flatMap(function callback(currentValue[, index[, array]]) {/* return element for new_array */}[, thisArg]): 首先使用映射函数映射每个元素,然后将结果压缩成一个新数组。

Iterator

  • Array.prototype[@@iterator](): 与 Array.prototype.values() 相同,返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值。
  • Array.prototype.entries(): 返回一个新的 Array Iterator 对象,该对象包含数组中每个索引的键/值对。
  • Array.prototype.keys(): 返回一个包含数组中每个索引键的 Array Iterator 对象。
  • Array.prototype.values(): 返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值。

字符串转换

  • Array.prototype.toLocaleString([locales[,options]]): 返回一个字符串表示数组中的元素。数组中的元素将使用各自的 toLocaleString 方法转成字符串。
  • Array.prototype.toString(): 返回一个字符串,表示指定的数组及其元素。

遍历

  • Array.prototype.forEach(callback(currentValue [, index [, array]])[, thisArg]): 对数组的每个元素执行一次给定的函数。
  • Array.prototype.map(callback(currentValue[, index[, array]]) {/* Return element for new_array */}[, thisArg]): 创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。
  • Array.prototype.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue]): 对数组中的每个元素执行一个由你提供的 reducer 函数(升序执行),将其结果汇总为单个返回值。
  • Array.prototype.reduceRight(callback(accumulator, currentValue[, index[, array]])[, initialValue]): 和 reduce 相似,降序执行。
  • Array.prototype.some(callback(element[, index[, array]])[, thisArg]): 测试数组中是不是至少有1个元素通过了被提供的函数测试。
  • Array.prototype.every(callback(element[, index[, array]])[, thisArg]): 测试一个数组内的所有元素是否都能通过某个指定函数的测试。
  • Array.prototype.filter(callback(element[, index[, array]])[, thisArg]): 创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
  • Array.prototype.find(callback[, thisArg]): 返回数组中满足提供的测试函数的第一个元素的值。
  • Array.prototype.findIndex(callback[, thisArg]): 返回数组中满足提供的测试函数的第一个元素的索引。

静态方法

  • Array.from(arrayLike[, mapFn[, thisArg]]): 从一个类似数组或可迭代对象创建一个新的,浅拷贝的数组实例。
  • Array.of([element1[, element2[, ...[, elementN]]]]): 创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型。
  • Array.isArray(): 用于确定传递的值是否是一个 Array 对象实例。

Array.of() 静态方法和 Array() 构造函数之间的区别

Array.of()Array() 构造函数之间的区别在于对单个数字参数的处理:Array.of(7) 创建一个具有单个元素 7 的数组,而 Array(7) 创建一个 length 为 7 的空数组(这意味着一个由 7 个空属性组成的数组,而不是具有实际 undefined 值的槽)。