From c43ef332c9395963ad974bcf8850bdac79f7c55c Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Sat, 12 Jun 2021 03:10:39 +0900 Subject: Web/JavaScript/Reference/Errors/I-J* を更新 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2021/06/11 時点の英語版に同期 --- .../errors/invalid_array_length/index.html | 35 +++++++++++++--------- 1 file changed, 21 insertions(+), 14 deletions(-) (limited to 'files/ja/web/javascript/reference/errors/invalid_array_length') diff --git a/files/ja/web/javascript/reference/errors/invalid_array_length/index.html b/files/ja/web/javascript/reference/errors/invalid_array_length/index.html index 4531daac7d..f1e016fe66 100644 --- a/files/ja/web/javascript/reference/errors/invalid_array_length/index.html +++ b/files/ja/web/javascript/reference/errors/invalid_array_length/index.html @@ -10,31 +10,37 @@ translation_of: Web/JavaScript/Reference/Errors/Invalid_array_length ---
{{jsSidebar("Errors")}}
-

JavaScript の例外 "Invalid array length" は、 {{jsxref("Array")}} または {{jsxref("ArrayBuffer")}} を長さが負の数か 232 以上で生成しようとした場合、または {{jsxref("Array.length")}} プロパティに負の数か 232 以上の値を設定しようとした場合に発生します。

+

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

+ +

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

+ +
+

補足: ArrayArrayBuffer は別個のデータ構造です (一方の実装がもう一方には影響しません)。

+

メッセージ

-
RangeError: Array length must be a finite positive integer (Edge)
-RangeError: invalid array length (Firefox)
-RangeError: Invalid array length (Chrome)
-RangeError: Invalid array buffer length (Chrome)
+
RangeError: invalid array length (Firefox)
+RangeError: Invalid array length (Chromium-based)
+RangeError: Array buffer allocation failed (Chromium-based)
 
-

エラー種別

+ +

エラーの種類

{{jsxref("RangeError")}}

-

原因

+

エラーの原因

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

-

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

-

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

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

@@ -45,7 +51,7 @@ RangeError: Invalid array buffer length (Chrome)
new Array(Math.pow(2, 40))
 new Array(-1)
-new ArrayBuffer(Math.pow(2, 32))
+new ArrayBuffer(Math.pow(2, 32)) //32 ビットシステム
 new ArrayBuffer(-1)
 
 let a = [];
@@ -60,6 +66,7 @@ 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 = [];
@@ -68,8 +75,8 @@ 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)
+// 0xffffffff は 2^32 - 1 の 16 進表記です。
+// (-1 >>> 0) と書くこともできます。
 

関連情報

-- cgit v1.2.3-54-g00ecf