数组length

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Array 实例的 length 数据属性表示该数组中的元素数量。该值是一个无符号的 32 位整数,在数值上始终大于数组中的最高索引。

¥The length data property of an Array instance represents the number of elements in that array. The value is an unsigned, 32-bit integer that is always numerically greater than the highest index in the array.

Try it

¥Value

小于 232 的非负整数。

¥A nonnegative integer less than 232.

Property attributes of 数组length
Writable yes
Enumerable no
Configurable no

描述

¥Description

length 属性的值是一个小于 232 的非负整数。

¥The value of the length property is a nonnegative integer with a value less than 232.

js
const listA = [1, 2, 3];
const listB = new Array(6);

console.log(listA.length);
// 3

console.log(listB.length);
// 6

listB.length = 2 ** 32; // 4294967296
// RangeError: Invalid array length

const listC = new Array(-100); // Negative numbers are not allowed
// RangeError: Invalid array length

数组对象观察 length 属性,并自动将 length 值与数组内容同步。这意味着:

¥The array object observes the length property, and automatically syncs the length value with the array's content. This means:

  • length 设置为小于当前长度的值会截断数组 — 超出新 length 的元素将被删除。
  • 将任何数组索引(小于 232 的非负整数)设置为超出当前 length 会扩展数组 - 增加 length 属性以反映新的最高索引。
  • length 设置为无效值(例如负数或非整数)会引发 RangeError 异常。

length 设置为大于当前长度的值时,数组将通过添加 空槽 而不是实际的 undefined 值来扩展。空槽与数组方法有一些特殊的交互;见 数组方法和空槽

¥When length is set to a bigger value than the current length, the array is extended by adding empty slots, not actual undefined values. Empty slots have some special interactions with array methods; see array methods and empty slots.

js
const arr = [1, 2];
console.log(arr);
// [ 1, 2 ]

arr.length = 5; // set array length to 5 while currently 2.
console.log(arr);
// [ 1, 2, <3 empty items> ]

arr.forEach((element) => console.log(element));
// 1
// 2

另见 length 与数值性质的关系

¥See also Relationship between length and numerical properties.

示例

¥Examples

迭代数组

¥Iterating over an array

在以下示例中,通过查看 length 属性来迭代数组 numbers。然后每个元素中的值加倍。

¥In the following example, the array numbers is iterated through by looking at the length property. The value in each element is then doubled.

js
const numbers = [1, 2, 3, 4, 5];
const length = numbers.length;
for (let i = 0; i < length; i++) {
  numbers[i] *= 2;
}
// numbers is now [2, 4, 6, 8, 10]

缩短数组

¥Shortening an array

如果当前长度大于 3,以下示例将数组 numbers 缩短为长度 3。

¥The following example shortens the array numbers to a length of 3 if the current length is greater than 3.

js
const numbers = [1, 2, 3, 4, 5];

if (numbers.length > 3) {
  numbers.length = 3;
}

console.log(numbers); // [1, 2, 3]
console.log(numbers.length); // 3
console.log(numbers[3]); // undefined; the extra elements are deleted

创建固定长度的空数组

¥Create empty array of fixed length

length 设置为大于当前长度的值会创建 稀疏数组

¥Setting length to a value greater than the current length creates a sparse array.

js
const numbers = [];
numbers.length = 3;
console.log(numbers); // [empty x 3]

具有不可写长度的数组

¥Array with non-writable length

当添加的元素超出当前长度时,数组会自动更新 length 属性。如果 length 属性设置为不可写,则数组将无法更新它。这会导致 严格模式 中出现错误。

¥The length property is automatically updated by the array when elements are added beyond the current length. If the length property is made non-writable, the array will not be able to update it. This causes an error in strict mode.

js
"use strict";

const numbers = [1, 2, 3, 4, 5];
Object.defineProperty(numbers, "length", { writable: false });
numbers[5] = 6; // TypeError: Cannot assign to read only property 'length' of object '[object Array]'
numbers.push(5); // // TypeError: Cannot assign to read only property 'length' of object '[object Array]'

规范

Specification
ECMAScript Language Specification
# sec-properties-of-array-instances-length

¥Specifications

浏览器兼容性

BCD tables only load in the browser

¥Browser compatibility

也可以看看