在 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 值的槽)。