Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

RangeError: invalid array length

この記事は編集レビューを必要としています。ぜひご協力ください

メッセージ

RangeError: invalid array length (Firefox)
RangeError: Invalid array length (Chrome)
RangeError: Invalid array buffer length (Chrome)

エラータイプ

RangeError

何が悪かったの?

以下のいずれかです:

  • 負数や 232 以上の値の数を Array や ArrayBuffer に設定した。
  • Array.length プロパティを負数や 232 以上の値の数に設定した。

なぜ ArrayArrayBuffer の length が制限されるのでしょうか?配列ArrayBufferlength プロパティは、符号なし 32-bit 整数を表し、値は 0 から 232-1 の範囲の値しか保持できません。

コンストラクタを使用して配列を生成した場合、最初の引数が配列の length と解釈されるように、リテラル表記を使用したいかもしれません。

さもなければ、length プロパティが設定される前、またはコンストラクタの引数として使用される前に、length を制限したいかもしれません。

無効なケース

new Array(Math.pow(2, 40))
new Array(-1)
new ArrayBuffer(Math.pow(2, 32))
new ArrayBuffer(-1)

let a = [];
a.length = a.length - 1;         // length プロパティに -1 を設定

let b = new Array(Math.pow(2, 32) - 1);
b.length = b.length + 1;         // length プロパティに 2^32 を設定

有効なケース

[ Math.pow(2, 40) ]                     // [ 1099511627776 ]
[ -1 ]                                  // [ -1 ]
new ArrayBuffer(Math.pow(2, 32) - 1)
new ArrayBuffer(0)

let a = [];
a.length = Math.max(0, a.length - 1);

let b = new Array(Math.pow(2, 32) - 1);
b.length = Math.min(0xffffffff, b.length + 1);   

// 0xffffffff is the hexadecimal notation for 2^32 - 1
// which can also be written as (-1 >>> 0)

関連項目

ドキュメントのタグと貢献者

 このページの貢献者: YuichiNukiyama, lv7777
 最終更新者: YuichiNukiyama,