A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developer.cdn.mozilla.net/ja/docs/Web/JavaScript/Reference/Errors/Invalid_array_length below:

RangeError: invalid array length - JavaScript

RangeError: invalid array length

JavaScript の例外 "Invalid array length" は、配列の長さが負の数か、プラットフォームで対応している最大値を超える値に設定しようとしたとき (すなわち、 Array または ArrayBuffer を生成しようとしたとき、または Array.length を設定しようとしたとき) に発生します。

配列の長さに許されている最大値は、プラットフォームとブラウザーとそのバージョンに依存します。 Array については、最大長は 2GB-1 (2^32-1) です。 ArrayBuffer については、最大値は 32 ビットシステムで 2GB-1 (2^32-1) です。 Firefox バージョン 89 から、 ArrayBuffer の最大値は 64 ビットシステムでは 8GB (2^33) です。

メモ: Array と ArrayBuffer は別個のデータ構造です (一方の実装がもう一方には影響しません)。

メッセージ
RangeError: invalid array length (Firefox)
RangeError: Invalid array length (Chromium-based)
RangeError: Array buffer allocation failed (Chromium-based)
エラーの種類 エラーの原因

配列の長さが不正になるのは、以下のような場合です。

コンストラクターを使用して Array を生成すると、最初の引数が Array の長さとして解釈されるので、代わりにリテラル表記を使った方が良いかもしれません。

そうでない場合は、 length プロパティを設定する前、またはコンストラクターの引数として使用する前に、長さを制限しておくとよいでしょう。

例 不正なケース
new Array(Math.pow(2, 40));
new Array(-1);
new ArrayBuffer(Math.pow(2, 32)); //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(Math.pow(2, 33)); // 64 ビットシステム、 Firefox 89 以降
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 は 2^32 - 1 の 16 進表記です。
// (-1 >>> 0) と書くこともできます。
関連情報

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4