Array.length

lengthArray 型のインスタンスであるオブジェクトのプロパティで、配列の要素の数を設定または取得します。値は符号なし32ビット整数で、常に配列の最も大きなインデックスよりも数値的に大きくなります。

解説

length プロパティの値は正符号を持つ整数で、2 の 32 乗 (232) 未満の値です。

var namelistA = new Array(4294967296); //2 to the 32nd power = 4294967296 
var namelistC = new Array(-100) //negative sign

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; //set array length less than 2 to the 32nd power 
console.log(namelistB.length); 

//4294967295

length プロパティに値をセットすることで、いつでも配列を短縮することができます。 length プロパティの値を現在より大きな値に変更すると、配列内の要素数も増加します。例えば length が現在 2 のところに 3 をセットすると、配列内の要素数は 3 になり、3番目の要素は反復処理できない空のスロットになります。

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

arr.length = 5; // 現在 2 の配列の長さを 5 に設定
console.log(arr);
// [ 1, 2, <3 の空アイテム> ]

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

ご覧の通り、 length プロパティは必ずしも配列内で定義された値の数を示しているわけではありません。詳細は length と数値プロパティとの関係 をご覧ください。

Array.length のプロパティ属性
書込可能
列挙可能 不可
設定可能 不可
  • Writable: この属性が false に設定されている場合、プロパティの値を変更することはできません。
  • Configurable: この属性が false に設定されている場合、プロパティの削除や属性 (Writable, Configurable, Enumerable) の変更の試みは失敗します。
  • Enumerable: この属性が true に設定されている場合、 プロパティは forfor..in ループ中で反復処理の対象にされます。

配列を反復処理する

以下の例では、配列 numbers がいくつの要素を持っているかを知るために length プロパティを見ることで、配列を反復処理します。その際それぞれの値は 2 倍されます。

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 より大きいかどうかを調べて、大きいならその length を 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

固定長の空の配列を作成

var numbers = [];
numbers.length = 3;
console.log(numbers); // [undefined, undefined, undefined]

仕様書

仕様書 状態 備考
ECMAScript (ECMA-262)
Array.length の定義
現行の標準
ECMAScript 2015 (6th Edition, ECMA-262)
Array.length の定義
標準
ECMAScript 5.1 (ECMA-262)
Array.length の定義
標準
ECMAScript 1st Edition (ECMA-262) 標準 初回定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
lengthChrome 完全対応 1Edge 完全対応 12Firefox 完全対応 1IE 完全対応 4Opera 完全対応 4Safari 完全対応 1WebView Android 完全対応 ≤37Chrome Android 完全対応 18Firefox Android 完全対応 4Opera Android 完全対応 10.1Safari iOS 完全対応 1Samsung Internet Android 完全対応 1.0nodejs 完全対応 0.1.100

凡例

完全対応  
完全対応

関連情報