Array 对象
JavaScript 的 Array 对象是用于构造数组的全局对象,数组是类似于列表的高阶对象。
- 构造器:
Array()
创建一个新的 Array 对象 - 静态属性:
get Array[@@species]
返回 Array 的构造函数 - 静态方法:
Array.from()
从类数组对象或者可迭代对象中创建一个新的数组实例Array.isArray()
用来判断某个变量是否是一个数组对象Array.of()
根据一组参数来创建新的数组实例,支持任意的参数数量和类型 -Array(1, 2, 3); // [1, 2, 3]
- 实例属性:
Array.prototype.length
: 数组中的元素个数Array.prototype[@@unscopables]
: 包含了所有 ES2015 (ES6) 中新定义的、且并未被更早的 ECMAScript 标准收纳的属性名。这些属性被排除在由 with 语句绑定的环境中
- 实例方法:
Array.prototype.at()
: at() 方法接收一个整数值并返回该索引的项目,允许正数和负数。负整数从数组中的最后一个项目开始倒数。(返回给定索引处的数组项。接受负整数,从最后一项开始计数。)Array.prototype.concat()
: 用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组Array.prototype.copyWithin()
: 浅复制数组的一部分到同一数组中的另一个位置,并返回它,不会改变原数组的长度Array.prototype.entries()
: 返回一个新的 Array Iterator 对象,该对象包含数组中每个索引的键/值对Array.prototype.every()
: 测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值Array.prototype.fill()
: 用一个固定值填充一个数组中从起始索引到终止索引内的全部元素Array.prototype.filter()
: 创建一个新数组,其包含通过所提供函数实现的测试的所有元素Array.prototype.find()
: 返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefinedArray.prototype.findIndex()
: 返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回 -1Array.prototype.flat()
: 按照一个可指定的深度递归遍历数组,并将所有元素与遍历到的子数组中的元素合并为一个新数组返回Array.prototype.flatMap()
: 使用映射函数映射每个元素,然后将结果压缩成一个新数组Array.prototype.forEach()
: 对数组的每个元素执行一次给定的函数Array.prototype.includes()
: 判断一个数组是否包含一个指定的值,如果包含则返回 true,否则返回 falseArray.prototype.indexOf()
: 返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回 -1Array.prototype.join()
: 将一个数组的所有元素连接成一个字符串并返回这个字符串Array.prototype.keys()
: 返回一个包含数组中每个索引键的 Array Iterator 对象Array.prototype.lastIndexOf()
: 返回指定元素在数组中的最后一个的索引,如果不存在则返回 -1Array.prototype.map()
: 返回一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值Array.prototype.pop()
: 从数组中删除最后一个元素,并返回该元素的值Array.prototype.push()
: 将一个或多个元素添加到数组的末尾,并返回该数组的新长度Array.prototype.reduce()
: 对数组中的每个元素执行一个由您提供的 reducer 函数(升序执行),将其结果汇总为单个返回值Array.prototype.reduceRight()
: 接受一个函数作为累加器(accumulator)和数组的每个值(从右到左)将其减少为单个值Array.prototype.reverse()
: 将数组中元素的位置颠倒,并返回该数组。该方法会改变原数组Array.prototype.shift()
: 从数组中删除第一个元素,并返回该元素的值Array.prototype.slice()
: 提取源数组的一部分并返回一个新数组Array.prototype.some()
: 测试数组中是不是至少有一个元素通过了被提供的函数测试Array.prototype.sort()
: 对数组元素进行原地排序并返回此数组Array.prototype.splice()
: 通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容Array.prototype.toLocaleString()
: 返回一个字符串表示数组中的元素。数组中的元素将使用各自的 Object.prototype.toLocaleString() 方法转成字符串Array.prototype.toString()
: 返回一个字符串表示指定的数组及其元素。数组中的元素将使用各自的 Object.prototype.toString() 方法转成字符串Array.prototype.unshift()
: 将一个或多个元素添加到数组的头部,并返回该数组的新长度Array.prototype.values()
: 返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值Array.prototype[@@iterator]()
: 返回一个新的 Array Iterator 对象,该对象包含数组每个索引的值
属性
Array.prototype[@@unscopables]
Symbol 属性 @@unscopable 包含了所有 ES2015 (ES6) 中新定义的、且并未被更早的 ECMAScript 标准收纳的属性名。这些属性被排除在由 with 语句绑定的环境中。
语法:arr[Symbol.unscopables]
描述:
with 绑定中未包含的数组默认属性有:
- copyWithin()
- entries()
- fill()
- find()
- findIndex()
- includes()
- keys()
- values()
Array.prototype[@@unscopables]
属性的属性特性:
- writable: false
- enumerable: false
- configurable: true
例子:
var keys = []; with(Array.prototype) { keys.push("something"); } Object.keys(Array.prototype[Symbol.unscopables]); // Object.keys(Array.prototype[Symbol.unscopables]); // (13) ['at', 'copyWithin', 'entries', 'fill', 'find', 'findIndex', 'flat', 'flatMap', 'includes', 'keys', 'values', 'findLast', 'findLastIndex']
Array.prototype.length
length 是 Array 的实例属性。返回或设置一个数组中的元素个数。该值是一个无符号 32-bit 整数,并且总是大于数组最高项的下标。
- Writable:如果设置为 false,该属性值将不能被修改。
- Configurable:如果设置为 false,删除或更改任何属性都将会失败。
- Enumerable: 如果设置为 true,属性可以通过迭代器 for 或 for...in 进行迭代。
Array.length 属性的属性特性:
- writable true
- enumerable false
- configurable false
方法
- 构造函数
- 静态方法 - Array.isArray()
- 实例方法
- valueOf(), toString()
- push(), pop()
- shift(), unshift()
- join()
- concat()
- reverse()
- slice()
- splice()
- sort()
- map()
- forEach()
- filter()
- some(), every()
- reduce(), reduceRight()
- indexOf(), lastIndexOf()
- 链式使用
构造函数
Array 是 JavaScript 的原生对象,同时也是一个构造函数,可以用它生成新的数组。
var arr = new Array(2); arr.length // 2 arr // [ empty x 2 ]
Array() 构造函数的参数 2,表示生成一个两个成员的数组,每个位置都是空值。
如果没有使用 new 关键字,运行结果也是一样的。
var arr = Array(2); // 等同于 var arr = new Array(2);
考虑到语义性,以及与其他构造函数用法保持一致,建议总是加上 new。
// 无参数时,返回一个空数组 new Array() // [] // 单个正整数参数,表示返回的新数组的长度 new Array(1) // [ empty ] new Array(2) // [ empty x 2 ] // 非正整数的数值作为参数,会报错 new Array(3.2) // RangeError: Invalid array length new Array(-3) // RangeError: Invalid array length // 单个非数值(比如字符串、布尔值、对象等)作为参数, // 则该参数是返回的新数组的成员 new Array('abc') // ['abc'] new Array([1]) // [Array[1]] // 多参数时,所有参数都是返回的新数组的成员 new Array(1, 2) // [1, 2] new Array('a', 'b', 'c') // ['a', 'b', 'c']
可以看到,Array() 作为构造函数,行为很不一致。因此,不建议使用它生成新数组,直接使用数组字面量是更好的做法。
// bad var arr = new Array(1, 2); // good var arr = [1, 2];
注意,如果参数是一个正整数,返回数组的成员都是空位。虽然读取的时候返回 undefined,但实际上该位置没有任何值。虽然这时可以读取到 length 属性,但是取不到键名。
var a = new Array(3); var b = [undefined, undefined, undefined]; a.length // 3 b.length // 3 a[0] // undefined b[0] // undefined 0 in a // false 0 in b // true
上面代码中,a 是 Array() 生成的一个长度为 3 的空数组,b 是一个三个成员都是 undefined 的数组,这两个数组是不一样的。读取键值的时候,a 和 b 都返回 undefined,但是 a 的键名(成员的序号)都是空的,b 的键名是有值的。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论