Array.length

lengthArray物件的屬性 ,可供設定或回傳該陣列實體中包含的元素個數。其值必為一大於零、32 位元、且恆大於該陣列最大索引數的正整數。

var items = ['shoes', 'shirts', 'socks', 'sweaters'];
items.length;

// returns 4

描述

length 屬性的值必為一正整數,其值必介於 0 ~ 2^32 (不包含)之間.

var namelistA = new Array(4294967296); //2^32 = 4294967296
var namelistC = new Array(-100) //負數

console.log(namelistA.length); //RangeError: Invalid array length
console.log(namelistC.length); //RangeError: Invalid array length



var namelistB = [];
namelistB.length = Math.pow(2,32)-1; //將長度設定介於 0 ~ 2^32 -1
console.log(namelistB.length);

//4294967295

你可以透過改變 length 屬性來改變陣列的長度。當你透過 length 屬性來增加陣列的長度時,陣列中實際的元素也會隨之增加。舉例來說,當你將 array.length 由 2 增加為 3,則改動後該陣列即擁有 3 個元素,該新增的元素則會是一個不可迭代(non-iterable)的空槽(empty slot)。

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

arr.length = 5; // 將arr的length由2改成5
console.log(arr);
// [ 1, 2, <3 empty items> ]

arr.forEach(element => console.log(element)); // 空元素無法被迭代
// 1
// 2

如上所見,length 屬性不盡然代表陣列中所有已定義的元素個數。詳見 length 與數值屬性的關係

Array.length 的屬性特性
可寫
可列舉
可配置
  • Writable: 如果此屬性值為false,則該屬性的內容值無法被改動。
  • Configurable: 如果此屬性值為false,任何刪除屬性或更改其屬性的操作(Writable, Configurable, or Enumerable)皆會失敗。
  • Enumerable: 如果此屬性值為true,該內容值可倍 forfor..in 迴圈迭代處理。

範例

對陣列進行迭代處理

以下範例中, 陣列 numbers 透過 length 屬性進行迭代操作,並將其內容值加倍。

var numbers = [1, 2, 3, 4, 5];
var length = numbers.length;
for (var i = 0; i < length; i++) {
  numbers[i] *= 2;
}
// numbers 內容值變為 [2, 4, 6, 8, 10]

縮減陣列

以下範例中, 陣列 numbers 的長度若大於 3,則將其長度縮減至 3。

var numbers = [1, 2, 3, 4, 5];

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

console.log(numbers); // [1, 2, 3]
console.log(numbers.length); // 3

規格

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

瀏覽器相容性

BCD tables only load in the browser

其他