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/identifier_after_number/index.html | 20 +++++--- .../reference/errors/illegal_character/index.html | 52 +++++++++++-------- .../errors/in_operator_no_object/index.html | 42 ++++++++-------- .../errors/invalid_array_length/index.html | 35 +++++++------ .../invalid_assignment_left-hand_side/index.html | 1 + .../errors/invalid_const_assignment/index.html | 48 +++++++++--------- .../reference/errors/invalid_date/index.html | 2 +- .../errors/invalid_for-in_initializer/index.html | 28 ++++++----- .../errors/invalid_for-of_initializer/index.html | 13 ++--- .../index.html | 28 ++++++----- .../reference/errors/is_not_iterable/index.html | 58 ++++++++++++++++------ .../reference/errors/json_bad_parse/index.html | 48 +++++++++--------- 12 files changed, 216 insertions(+), 159 deletions(-) (limited to 'files/ja/web/javascript/reference') diff --git a/files/ja/web/javascript/reference/errors/identifier_after_number/index.html b/files/ja/web/javascript/reference/errors/identifier_after_number/index.html index 1903ac1fda..3a0b8fe08b 100644 --- a/files/ja/web/javascript/reference/errors/identifier_after_number/index.html +++ b/files/ja/web/javascript/reference/errors/identifier_after_number/index.html @@ -10,9 +10,12 @@ translation_of: Web/JavaScript/Reference/Errors/Identifier_after_number ---
{{JSSidebar("Errors")}}
-

メッセージ

+

JavaScript の例外 "identifier starts immediately after numeric literal" は、識別子が数字で始まっているときに発生します。識別子の先頭は英字、アンダースコア (_)、ドル記号 ($) しか使うことができません。

-
SyntaxError: identifier starts immediately after numeric literal (Firefox)
+

エラーメッセージ

+ +
SyntaxError: Unexpected identifier after numeric literal (Edge)
+SyntaxError: identifier starts immediately after numeric literal (Firefox)
 SyntaxError: Unexpected number (Chrome)
 
@@ -22,21 +25,24 @@ SyntaxError: Unexpected number (Chrome)

何がうまくいかなかったのか?

-

{{Glossary("Identifier", "identifiers")}} と呼ばれる変数名は特定のルールに従う必要があり、それに反しています!

+

変数の名前、いわゆる識別子は特定のルールに従う必要があり、それに反しています。

-

JavaScript の識別子は文字かアンダースコア (_)、ドル記号 ($) で始まる必要があります。数値からは始められません! 2 文字目以降でのみ、数値 (0-9) を使用できます。

+

JavaScript の識別子は文字かアンダースコア (_)、ドル記号 ($) で始まる必要があります。数値からは始められません。 2 文字目以降でのみ、数値 (0-9) を使用することができます。

-

数値文字から始まる変数名

+

数字から始まる変数名

-

JavaScript は変数名を数値から始めることはできません。次は失敗です:

+

JavaScript は変数名を数字から始めることはできません。次の例は失敗します。

var 1life = 'foo';
 // SyntaxError: identifier starts immediately after numeric literal
 
 var foo = 1life;
 // SyntaxError: identifier starts immediately after numeric literal
+
+alert(1.foo);
+// SyntaxError: identifier starts immediately after numeric literal
 

数値始まりにならないように、変数名を変更する必要があります。

@@ -49,5 +55,5 @@ var foo = life1; diff --git a/files/ja/web/javascript/reference/errors/illegal_character/index.html b/files/ja/web/javascript/reference/errors/illegal_character/index.html index 7f3ed44b20..4a679a996f 100644 --- a/files/ja/web/javascript/reference/errors/illegal_character/index.html +++ b/files/ja/web/javascript/reference/errors/illegal_character/index.html @@ -2,17 +2,20 @@ title: 'SyntaxError: illegal character' slug: Web/JavaScript/Reference/Errors/Illegal_character tags: - - Error - - Errors - - JavaScript - - SyntaxError +- Error +- Errors +- JavaScript +- SyntaxError translation_of: Web/JavaScript/Reference/Errors/Illegal_character --- -
{{jsSidebar("Errors")}}
+

{{jsSidebar("Errors")}}

+ +

JavaScript の例外 "illegal character" は、コード内のこの位置に属していない、無効または予期しないトークンがあった場合に発生します。

メッセージ

-
SyntaxError: illegal character (Firefox)
+
SyntaxError: Invalid character (Edge)
+SyntaxError: illegal character (Firefox)
 SyntaxError: Invalid or unexpected token (Chrome)
 
@@ -22,51 +25,56 @@ SyntaxError: Invalid or unexpected token (Chrome)

何がうまくいかなかったのか?

-

コードのこの位置に属していない無効なトークンまたは予期しないトークンがあります。シンタックスハイライトをサポートしているエディターを使用して、マイナス記号 ( - ) とダッシュ () や、クオート ( " ) と非標準のクオーテーション記号 () のようなミスがないか、コードを注意深くチェックしてください。

+

コードのこの位置に属していない、無効なトークンまたは予期しないトークンがあります。構文強調機能のあるエディターを使用して、マイナス記号 ( - ) とダッシュ () や、単純な引用符 ( " ) と標準外の引用符 () のようなミスがないか、コードを注意深くチェックしてください。

-

文字のミスマッチ

+

合わない文字

-

いくつかの文字は似たように見えますが、パーサーがコードを解釈できなくなります。

+

似たような文字でも、パーサーがコードの解釈に失敗するものがあります。有名な例としては、引用符、マイナス、セミコロンなどがあります (ギリシャ文字の疑問符 (U+37e) も同様です)。

-
“This looks like a string”;
-// SyntaxError: illegal character
+
“This looks like a string”;  // SyntaxError: illegal character
+                             // “ と ” は " ではありませんが、見た目が似ています
 
-42 – 13;
-// SyntaxError: illegal character
+42 – 13;                     // SyntaxError: illegal character
+                             // – は - ではありませんが、見た目が似ています
+
+var foo = 'bar';             // SyntaxError: illegal character
+                             // <37e> は ; ではありませんが、見た目が似ています
 
-

これは動作します:

+

次のものは動作します。

"This is actually a string";
-
 42 - 13;
+var foo = 'bar';
 
-

文字の付け忘れ

+

エディターや IDE の中には、その旨を通知してくれたり、少なくとも若干異なる強調表示をしてくれるものもありますが、すべてではありません。自分のコードにこのようなことが起こり、問題の原因がわからない場合は、問題のある行を削除して再入力するのが最善の方法です。

+ +

文字の入れ忘れ

-

さまざまな個所で、文字を付け忘れやすいです。

+

あちこちで文字を入れ忘れることがあります。

var colors = ['#000', #333', '#666'];
 // SyntaxError: illegal character
 
-

'#333' に付け忘れたクオートを追加します。

+

'#333' に付け忘れている引用符を追加してください。

var colors = ['#000', '#333', '#666'];
-

隠れた文字

+

隠れた文字

-

外部のソースをコピー & ペーストすると、不正な文字が含まれていることがあります。気を付けて!

+

外部のソースをコピー&ペーストすると、不正な文字が含まれていることがあります。気を付けて!

-
var foo = 'bar';​
+
var foo = 'bar';
 // SyntaxError: illegal character
 

Vim のようなエディターでこのコードを調査すると、実際には zero-width space (ZWSP) (U+200B) 文字があることが分かります。

-
var foo = 'bar';​<200b>
+
var foo = 'bar';<200b>

関連項目

diff --git a/files/ja/web/javascript/reference/errors/in_operator_no_object/index.html b/files/ja/web/javascript/reference/errors/in_operator_no_object/index.html index 3bf515574d..08ef44d836 100644 --- a/files/ja/web/javascript/reference/errors/in_operator_no_object/index.html +++ b/files/ja/web/javascript/reference/errors/in_operator_no_object/index.html @@ -2,50 +2,50 @@ title: 'TypeError: cannot use ''in'' operator to search for ''x'' in ''y''' slug: Web/JavaScript/Reference/Errors/in_operator_no_object tags: - - Error - - Errors - - JavaScript - - TypeError +- Error +- Errors +- JavaScript +- TypeError translation_of: Web/JavaScript/Reference/Errors/in_operator_no_object ---
{{jsSidebar("Errors")}}
-

JavaScript の例外 "right-hand side of 'in' should be an object" は、 in 演算子が文字列、数値、その他のプリミティブ型の中を検索するために使用された場合に発生します。これは、あるプロパティがオブジェクト内にあることをチェックする用途でしか使用することができません。

+

JavaScript の例外 "right-hand side of 'in' should be an object" は、 in 演算子が文字列、数値、その他のプリミティブ型の中を検索するために使用された場合に発生します。これは、あるプロパティがオブジェクト内にあることをチェックする用途でしか使用することができません。

-

メッセージ

+

エラーメッセージ

-
TypeError: Invalid operand to 'in' (Edge)
+
TypeError: Invalid operand to 'in' (Edge)
 TypeError: right-hand side of 'in' should be an object, got 'x' (Firefox)
 TypeError: cannot use 'in' operator to search for 'x' in 'y' (Firefox, Chrome)
 
-

エラー種別

+

エラーの種類

{{jsxref("TypeError")}}

-

原因

+

エラーの原因

in 演算子はあるプロパティがオブジェクト内にあることをチェックする用途でしか使用することができません。文字列、数値、その他のプリミティブ型の中を検索することはできません。

-

+

-

文字列内の検索

+

文字列内の検索

他のプログラミング言語 (Python など) とは異なり、 in 演算子を使用して文字列の中を検索することはできません。

-
"Hello" in "Hello World";
+
"Hello" in "Hello World";
 // TypeError: cannot use 'in' operator to search for 'Hello' in 'Hello World'

Instead you will need to use {{jsxref("String.prototype.indexOf()")}}, for example.

-
"Hello World".indexOf("Hello") !== -1;
+
"Hello World".indexOf("Hello") !== -1;
 // true
-

オペランドを null や undefined にすることはできない

+

オペランドを null や undefined にすることはできない

調査対象のオブジェクトが実際に {{jsxref("null")}} や {{jsxref("undefined")}} になっていないことを確認してください。

-
var foo = null;
+
var foo = null;
 "bar" in foo;
 // TypeError: cannot use 'in' operator to search for 'bar' in 'foo' (Chrome)
 // TypeError: right-hand side of 'in' should be an object, got null (Firefox)
@@ -53,23 +53,23 @@ TypeError: cannot use 'in' operator to search for 'x' in 'y' (Firefox, Chrome)
 
 

in 演算子は常にオブジェクトを期待します。

-
var foo = { baz: "bar" };
+
var foo = { baz: "bar" };
 "bar" in foo; // false
 
 "PI" in Math; // true
 "pi" in Math; // false
 
-

配列の中の検索

+

配列の中の検索

-

in 演算子を使用して {{jsxref("Array")}} オブジェクトの中を検索するときは注意してください。 in 演算子は添字の数値をチェックするのであり、その位置の値をチェックするのではありません。

+

in 演算子を使用して {{jsxref("Array")}} オブジェクトの中を検索するときは注意してください。 in 演算子は添字の数値をチェックするものであり、その位置の値をチェックするのではありません。

-
var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
+
var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple'];
 3 in trees; // true
 "oak" in trees; // false
-

関連情報

+

関連情報

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")}}

-

原因

+

エラーの原因

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

    -
  • {{jsxref("Array")}} や {{jsxref("ArrayBuffer")}} を、負の数や 232 以上の長さで生成しようとした。
  • -
  • {{jsxref("Array.length")}} プロパティに負の数や 232 以上の値を設定しようとした。
  • +
  • {{jsxref("Array")}} や {{jsxref("ArrayBuffer")}} を、負の数の長さで生成しようとしたか、 {{jsxref("Array.length")}} プロパティに負の数を設定しようとした。
  • +
  • 2GB-1 (2^32-1) よりも大きな {{jsxref("Array")}} を生成しようとしたか、 {{jsxref("Array.length")}} プロパティに設定しようとした。
  • +
  • 32 ビットシステムで 2GB-1 (2^32-1)、 64 ビットシステムで 8GB (2^33) を超える {{jsxref("ArrayBuffer")}} を生成しようとした。
  • +
  • Firefox 89 以前: 2GB-1 (2^32-1) より大きな {{jsxref("ArrayBuffer")}} を生成しようとした。
-

なぜ 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) と書くこともできます。
 

関連情報

diff --git a/files/ja/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html b/files/ja/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html index 903e159477..d6c4c38c20 100644 --- a/files/ja/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html +++ b/files/ja/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html @@ -2,6 +2,7 @@ title: 'ReferenceError: invalid assignment left-hand side' slug: Web/JavaScript/Reference/Errors/Invalid_assignment_left-hand_side tags: + - Error - Errors - JavaScript - ReferenceError diff --git a/files/ja/web/javascript/reference/errors/invalid_const_assignment/index.html b/files/ja/web/javascript/reference/errors/invalid_const_assignment/index.html index e446935a23..2ce876cb25 100644 --- a/files/ja/web/javascript/reference/errors/invalid_const_assignment/index.html +++ b/files/ja/web/javascript/reference/errors/invalid_const_assignment/index.html @@ -2,34 +2,36 @@ title: 'TypeError: invalid assignment to const "x"' slug: Web/JavaScript/Reference/Errors/Invalid_const_assignment tags: - - Error - - Errors - - JavaScript - - TypeError +- Error +- JavaScript +- TypeError translation_of: Web/JavaScript/Reference/Errors/Invalid_const_assignment ---
{{jsSidebar("Errors")}}
-

メッセージ

+

JavaScript の例外 "invalid assignment to const" は、定数を変更しようとしたときに発生します。 JavaScript の const で宣言すると、再代入野菜宣言を行うことができません。

-
TypeError: invalid assignment to const "x" (Firefox)
+

エラーメッセージ

+ +
TypeError: invalid assignment to const "x" (Firefox)
 TypeError: Assignment to constant variable. (Chrome)
-TypeError: Redeclaration of const 'x' (IE/Edge)
+TypeError: Assignment to const (Edge)
+TypeError: Redeclaration of const 'x' (IE)
 

エラータイプ

{{jsxref("TypeError")}}

-

何がうまくいかなかったのか??

+

エラーの原因

定数は、通常の実行中にプログラムによって変更できない値です。再代入も再宣言もできません。JavaScript では、定数を const キーワードで宣言します。

-

無効な再宣言

+

無効な再宣言

-

同じブロックスコープで同じ定数名に値を代入すると、エラーがスローされます。

+

同じブロックスコープで同じ定数名に値を代入すると、エラーが発生します。

const COLUMNS = 80;
 
@@ -37,20 +39,20 @@ TypeError: Redeclaration of const 'x' (IE/Edge)
 
 COLUMNS = 120; // TypeError: invalid assignment to const `COLUMNS'
-

エラーを修正

+

エラーの修正

エラーを修正するには、複数の選択肢があります。問題となっている定数で、達成しようとしていたことを確認してください。

-

リネーム

+

名前の変更

-

ほかの定数を宣言するつもりだったならば、ほかの名前を選んで、リネームしてください。この定数名はすでにこのスコープで使用されています。

+

ほかの定数を宣言しようとしていたのであれば、ほかの名前を選んで名前を変更してください。この定数名は、すでにこのスコープで使用されています。

const COLUMNS = 80;
 const WIDE_COLUMNS = 120;
-

constletvar?

+

constletvar

-

定数を宣言するつもりがなかったのなら、const を使用しないでください。ブロックスコープの変数なら、let で、グローバルスコープの変数なら var で宣言してください。

+

定数を宣言するつもりがなかったのであれば、 const を使用しないでください。ブロックスコープの変数であれば let で、グローバルスコープの変数であれば var で宣言してください。

let columns = 80;
 
@@ -59,9 +61,9 @@ const WIDE_COLUMNS = 120;
let columns = 120;
-

スコープ

+

スコープ

-

正しいスコープにあるか確認してください。たとえば、この定数はこのスコープにあるべきなのでしょうか?それとも関数にあるべきなのでしょうか?

+

正しいスコープにあるか確認してください。たとえば、この定数はこのスコープにあるべきなのでしょうか。それとも関数にあるべきなのでしょうか。

const COLUMNS = 80;
 
@@ -69,15 +71,15 @@ function setupBigScreenEnvironment() {
   const COLUMNS = 120;
 }
-

const と不変性

+

const と不変性

-

const 宣言は、値への読み取り専用参照を作成します。それが保持している値が不変であることを意味するものではなく、単に変数識別子を再割り当てできないだけです。たとえば、コンテンツがオブジェクトである場合、オブジェクト自体は依然として変更可能であることを意味します。 つまり、変数に格納されている値を変更することはできません:

+

const 宣言は、値への読み取り専用の参照を作成します。それが保持している値が不変であることを意味するものではなく、変数識別子に再代入できないだけです。たとえば、コンテンツがオブジェクトである場合、オブジェクト自体はまだ変更可能であることを意味します。 つまり、変数に格納されている値を変更することはできないということです。

const obj = {foo: 'bar'};
 obj = {foo: 'baz'}; // TypeError: invalid assignment to const `obj'
 
-

しかし、変数内のプロパティは変更できます:

+

しかし、変数内のプロパティは変更することができます。

obj.foo = 'baz';
 obj; // Object { foo: "baz" }
@@ -85,7 +87,7 @@ obj; // Object { foo: "baz" }

関連項目

diff --git a/files/ja/web/javascript/reference/errors/invalid_date/index.html b/files/ja/web/javascript/reference/errors/invalid_date/index.html index 65dc24c331..2693cb120b 100644 --- a/files/ja/web/javascript/reference/errors/invalid_date/index.html +++ b/files/ja/web/javascript/reference/errors/invalid_date/index.html @@ -24,7 +24,7 @@ RangeError: Provided date is not in valid range (Chrome)

{{jsxref("RangeError")}}

-

原因

+

エラーの原因

無効な日付を示す文字列が {{jsxref("Date")}} または {{jsxref("Date.parse()")}} に渡されたことです。

diff --git a/files/ja/web/javascript/reference/errors/invalid_for-in_initializer/index.html b/files/ja/web/javascript/reference/errors/invalid_for-in_initializer/index.html index bb8948a49e..5b153dfc43 100644 --- a/files/ja/web/javascript/reference/errors/invalid_for-in_initializer/index.html +++ b/files/ja/web/javascript/reference/errors/invalid_for-in_initializer/index.html @@ -3,7 +3,6 @@ title: 'SyntaxError: for-in loop head declarations may not have initializers' slug: Web/JavaScript/Reference/Errors/Invalid_for-in_initializer tags: - Error - - Errors - JavaScript - Strict Mode - SyntaxError @@ -11,10 +10,12 @@ translation_of: Web/JavaScript/Reference/Errors/Invalid_for-in_initializer ---
{{jsSidebar("Errors")}}
-

メッセージ

+

JavaScript の strict モード専用の例外である "for-in loop head declarations may not have initializers" は、 for...in の先頭に初期化構文が含まれていた場合、例えば |for (var i = 0 in obj)| のような場合に発生します。これは strict モードの for-in ループでは許可されていません。

-
SyntaxError: for-in loop head declarations may not have initializers (Firefox)
+

エラーメッセージ

+
SyntaxError: for-in loop head declarations cannot have an initializer (Edge)
+SyntaxError: for-in loop head declarations may not have initializers (Firefox)
 SyntaxError: for-in loop variable declaration may not have an initializer. (Chrome)
 
@@ -24,11 +25,11 @@ SyntaxError: for-in loop variable declaration may not have an initializer. (Chro

何がうまくいかなかったのか?

-

for...in ループのヘッダーに初期化式が含まれています。つまり、変数を宣言し、値を代入しています |for (var i = 0 in obj)|。非 strict モードでは、このヘッダー宣言は暗黙裡に無視され、|for (var i in obj)| のように動作します。しかし、strict モードでは SyntaxError がスローされます。

+

for...in ループの先頭に初期化式が含まれています。つまり、 |for (var i = 0 in obj)| のように変数を宣言して値を代入しています。 strict モードでない場合は、このヘッダー宣言は暗黙に無視され、|for (var i in obj)| のように動作します。しかし、strict モードでは SyntaxError が発生します。

-

この例は SyntaxError をスローします:

+

この例では SyntaxError が発生します。

"use strict";
 
@@ -41,9 +42,9 @@ for (var i = 0 in obj) {
 // SyntaxError: for-in loop head declarations may not have initializers
 
-

有効な for-in ループ

+

有効な for-in ループ

-

for-in ループのヘッダーから初期化子 (i = 0) を削除します。

+

for-in ループのヘッダーから初期化子 (i = 0) を削除してください。

"use strict";
 
@@ -54,9 +55,9 @@ for (var i in obj) {
 }
 
-

Array イテレーション

+

Array の反復処理

-

for...in ループを Array イテレーションで使用すべきではありません。{{jsxref("Array")}} を反復するのに、for-in ループの代わりに for ループを使用するつもりはありますか?for ループでは、初期化子を設定できます:

+

for...in ループは Array の反復処理で使用すべきではありません。 {{jsxref("Array")}} を反復するのに、 for ループを for-in ループの代わりに使うつもりだったのでしょうか。 for ループならば、初期化子を設定することができます。

var arr = [ "a", "b", "c" ]
 
@@ -69,7 +70,10 @@ for (var i = 2; i < arr.length; i++) {
 

関連項目

    -
  • for...in
  • -
  • for...of – strict モードと非 strict モードどちらでも初期化できない。
  • -
  • for – array イテレーションに向いており、初期化子を定義できる。
  • +
  • + for...in +
  • +
  • + for...of – こちらも strict モードであろうとなかろうと初期化子が使用できない。
  • +
  • for – 配列の反復処理に向いており、初期化子を定義できる。
diff --git a/files/ja/web/javascript/reference/errors/invalid_for-of_initializer/index.html b/files/ja/web/javascript/reference/errors/invalid_for-of_initializer/index.html index 99792a7afe..011623db9f 100644 --- a/files/ja/web/javascript/reference/errors/invalid_for-of_initializer/index.html +++ b/files/ja/web/javascript/reference/errors/invalid_for-of_initializer/index.html @@ -5,17 +5,18 @@ title: >- slug: Web/JavaScript/Reference/Errors/Invalid_for-of_initializer tags: - Error - - Errors - JavaScript - SyntaxError translation_of: Web/JavaScript/Reference/Errors/Invalid_for-of_initializer ---
{{jsSidebar("Errors")}}
-

メッセージ

+

JavaScript の例外 "a declaration in the head of a for-of loop can't have an initializer" は、 for...of ループの先頭に |for (var i = 0 of iterable)| のように初期化子が含まれている場合に発生します。これは for-of ループでは許可されていません。

-
SyntaxError: a declaration in the head of a for-of loop can't have an initializer (Firefox)
+

エラーメッセージ

+
SyntaxError: for-of loop head declarations cannot have an initializer (Edge)
+SyntaxError: a declaration in the head of a for-of loop can't have an initializer (Firefox)
 SyntaxError: for-of loop variable declaration may not have an initializer. (Chrome)
 
@@ -25,11 +26,11 @@ SyntaxError: for-of loop variable declaration may not have an initializer. (Chro

何がうまくいかなかったのか?

-

for...of ループのヘッダ―に初期化式が含まれています。つまり、変数が宣言され、値が代入されています |for (var i = 0 of iterable)|。これは、for-of ループでは許可されていません。初期化できる for ループを使用した方が良いかもしれません。

+

for...of ループの先頭に初期化式が含まれています。つまり、 |for (var i = 0 of iterable)| のように変数が宣言され、値が代入されています。これは、 for-of ループでは許可されていません。初期化できる for ループを使用した方が良いかもしれません。

-

不正な for-of ループ

+

不正な for-of ループ

let iterable = [10, 20, 30];
 
@@ -40,7 +41,7 @@ for (let value = 50 of iterable) {
 // SyntaxError: a declaration in the head of a for-of loop can't
 // have an initializer
-

有効な for-of ループ

+

有効な for-of ループ

for-of ループのヘッダーから初期化子 (value = 50) を取り除く必要があります。おそらく、50 をオフセット値にしようとしているのでしょうから、たとえばループのボディー内で 50 を加えられます。

diff --git a/files/ja/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html b/files/ja/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html index 5279e67cfa..4edf6554fe 100644 --- a/files/ja/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html +++ b/files/ja/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html @@ -2,18 +2,20 @@ title: 'TypeError: invalid ''instanceof'' operand ''x''' slug: Web/JavaScript/Reference/Errors/invalid_right_hand_side_instanceof_operand tags: - - Error - - Errors - - JavaScript - - Reference - - TypeError +- Error +- Errors +- JavaScript +- Reference +- TypeError translation_of: Web/JavaScript/Reference/Errors/invalid_right_hand_side_instanceof_operand ---
{{jsSidebar("Errors")}}
-

メッセージ

+

JavaScript の例外 "invalid 'instanceof' operand" は、 instanceof 演算子の右側のオペランドにコンストラクターオブジェクト、すなわち prototype を持ち呼び出すことができるものが使用されなかった場合に発生します。

-
TypeError: invalid 'instanceof' operand "x" (Firefox)
+

エラーメッセージ

+ +
TypeError: invalid 'instanceof' operand "x" (Firefox)
 TypeError: "x" is not a function (Firefox)
 TypeError: Right-hand side of 'instanceof' is not an object (Chrome)
 TypeError: Right-hand side of 'instanceof' is not callable (Chrome)
@@ -28,18 +30,20 @@ TypeError: Right-hand side of 'instanceof' is not callable (Chrome)

+

instanceof と typeof

+
"test" instanceof ""; // TypeError: invalid 'instanceof' operand ""
 42 instanceof 0;      // TypeError: invalid 'instanceof' operand 0
 
 function Foo() {}
-var f = Foo();        // Foo() is called and returns undefined
+var f = Foo();        // Foo() が呼び出されて undefined を返す
 var x = new Foo();
 
 x instanceof f;       // TypeError: invalid 'instanceof' operand f
 x instanceof x;       // TypeError: x is not a function
 
-

これらのエラータイプを修正するには、instanceof 演算子typeof 演算子 に置き換えるか、評価結果の代わりに関数名を使用するようにしてください。

+

これらのエラーを修正するには、instanceof 演算子typeof 演算子 に置き換えるか、評価結果の代わりに関数名を使用するようにしてください。

typeof "test" == "string"; // true
 typeof 42 == "number"      // true
@@ -55,8 +59,6 @@ x instanceof Foo;          // true
 

関連項目

- -

 

diff --git a/files/ja/web/javascript/reference/errors/is_not_iterable/index.html b/files/ja/web/javascript/reference/errors/is_not_iterable/index.html index 6da6ca9b19..665371733f 100644 --- a/files/ja/web/javascript/reference/errors/is_not_iterable/index.html +++ b/files/ja/web/javascript/reference/errors/is_not_iterable/index.html @@ -10,9 +10,11 @@ translation_of: Web/JavaScript/Reference/Errors/is_not_iterable ---
{{jsSidebar("Errors")}}
-

メッセージ

+

JavaScript の例外 "is not iterable" は、 for…of の右辺として与えられた値や、 {{jsxref("Promise.all")}} または {{jsxref("TypedArray.from")}} のような関数の引数として与えられた値が反復可能オブジェクトではなかった場合に発生します。

-
TypeError: 'x' is not iterable (Firefox, Chrome)
+

エラーメッセージ

+ +
TypeError: 'x' is not iterable (Firefox, Chrome)
 TypeError: 'x' is not a function or its return value is not iterable (Chrome)
 
@@ -22,13 +24,13 @@ TypeError: 'x' is not a function or its return value is not iterable (Chrome)

何がうまくいかなかったのか?

-

for…of の右側や {{jsxref("Promise.all")}} や {{jsxref("TypedArray.from")}} のような関数の引数として与えられた値が 反復可能オブジェクト ではありません。反復可能なものは、{{jsxref("Array")}} や {{jsxref("String")}}、{{jsxref("Map")}}、ジェネレーターの結果のようなビルトイン反復可能型や 反復処理プロトコル を実装したオブジェクトです。

+

for…of の右辺、 {{jsxref("Promise.all")}} や {{jsxref("TypedArray.from")}} などの引数として指定された値が反復可能オブジェクトではありません。反復可能なものは、 {{jsxref("Array")}}, {{jsxref("String")}}, {{jsxref("Map")}} 等のような組み込み反復可能型や、ジェネレーターの結果、反復可能プロトコルを実装しているオブジェクトが成ることができます。

-

オブジェクトのプロパティを反復処理する

+

オブジェクトのプロパティの反復処理

-

JavaScript では、反復処理プロトコル を実装していない限り {{jsxref("Object")}} は反復処理できません。それゆえ、オブジェクトのプロパティを反復処理するために for…of を使用することはできません。

+

JavaScript では、 {{jsxref("Object")}} は反復処理プロトコル を実装していない限り反復処理できません。したがって、オブジェクトのプロパティを反復処理するために for…of を使用することはできません。

var obj = { 'France': 'Paris', 'England': 'London' };
 for (let p of obj) { // TypeError: obj is not iterable
@@ -48,10 +50,9 @@ for (let country of Object.keys(obj)) {
 for (const [country, capital] of Object.entries(obj))
     console.log(country, capital);
 
-
 
-

このユースケースのそのほかの選択肢として、{{jsxref("Map")}} を使用することもできます:

+

この使用例のそのほかの選択肢として、{{jsxref("Map")}} を使用することもできます。

var map = new Map;
 map.set('France', 'Paris');
@@ -69,9 +70,9 @@ for (const [country, capital] of map.entries())
     console.log(country, capital);
 
-

ジェネレーターを反復処理する

+

ジェネレーターを反復処理する

-

ジェネレーター は反復可能オブジェクトを生成するために呼び出す関数です。

+

ジェネレーター 反復可能オブジェクトを生成するために呼び出す関数です。

function* generate(a, b) {
   yield a;
@@ -93,13 +94,38 @@ for (let x of generate(1,2))
     console.log(x);
 
-

関連項目

+

独自の反復可能オブジェクトでの反復処理

+ +

独自の反復可能オブジェクトは、 {{jsxref("Symbol.iterator")}} メソッドを実装することで作成することができます。 iterator メソッドはイテレーターであるオブジェクト、すなわち next メソッドを持っている必要があります。 +

+ +
const myEmptyIterable = {
+    [Symbol.iterator]() {
+        return [] // [] は反復可能ですが、イテレーターではありません。 -- next メソッドがないからです。
+    }
+}
+
+Array.from(myEmptyIterable);  // TypeError: myEmptyIterable is not iterable
+
+ +

こちらは正しい実装です。

+ +
const myEmptyIterable = {
+    [Symbol.iterator]() {
+        return [][Symbol.iterator]()
+    }
+}
+
+Array.from(myEmptyIterable);  // []
+
+ +

関連情報

diff --git a/files/ja/web/javascript/reference/errors/json_bad_parse/index.html b/files/ja/web/javascript/reference/errors/json_bad_parse/index.html index 1f1af72e0e..6115bfd192 100644 --- a/files/ja/web/javascript/reference/errors/json_bad_parse/index.html +++ b/files/ja/web/javascript/reference/errors/json_bad_parse/index.html @@ -2,20 +2,20 @@ title: 'SyntaxError: JSON.parse: bad parsing' slug: Web/JavaScript/Reference/Errors/JSON_bad_parse tags: - - Error - - Errors - - JSON - - JavaScript - - SyntaxError +- Error +- Errors +- JSON +- JavaScript +- SyntaxError translation_of: Web/JavaScript/Reference/Errors/JSON_bad_parse ---
{{jsSidebar("Errors")}}

JavaScript の例外で、 {{jsxref("JSON.parse()")}} が文字列を JSON として解釈するのに失敗した場合に発生します。

-

メッセージ

+

メッセージ

-
SyntaxError: JSON.parse: unterminated string literal
+
SyntaxError: JSON.parse: unterminated string literal
 SyntaxError: JSON.parse: bad control character in string literal
 SyntaxError: JSON.parse: bad character in string literal
 SyntaxError: JSON.parse: bad Unicode escape
@@ -48,21 +48,21 @@ SyntaxError: JSON.parse: unexpected character
 SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data
 SyntaxError: JSON.parse Error: Invalid character at position {0} (Edge)
-

エラー種別

+

エラー種別

{{jsxref("SyntaxError")}}

-

エラーの原因

+

エラーの原因

{{jsxref("JSON.parse()")}} は文字列を JSON として解釈します。この文字列は妥当な JSON であるべきであり、不正確な構文に出会った場合、このエラーが発生します。

-

+

-

JSON.parse() は末尾のカンマを許容しない

+

JSON.parse() は末尾のカンマを許容しない

どちらの行でも SyntaxError が発生します。

-
JSON.parse('[1, 2, 3, 4,]');
+
JSON.parse('[1, 2, 3, 4,]');
 JSON.parse('{"foo": 1,}');
 // SyntaxError JSON.parse: unexpected character
 // at line 1 column 14 of the JSON data
@@ -70,26 +70,26 @@ JSON.parse('{"foo": 1,}');
 
 

末尾のカンマを省略すると、正しく JSON として解釈します。

-
JSON.parse('[1, 2, 3, 4]');
+
JSON.parse('[1, 2, 3, 4]');
 JSON.parse('{"foo": 1}');
-

プロパティ名は二重引用符で囲んだ文字列でなければならない

+

プロパティ名は二重引用符で囲んだ文字列でなければならない

-

プロパティの周囲を囲むのに、たとえば'foo' のように単一引用符を使用してはいけません。

+

プロパティを囲むのに、たとえば 'foo' のように単一引用符を使用してはいけません。

-
JSON.parse("{'foo': 1}");
+
JSON.parse("{'foo': 1}");
 // SyntaxError: JSON.parse: expected property name or '}'
 // at line 1 column 2 of the JSON data

代わりに "foo" と書いてください。

-
JSON.parse('{"foo": 1}');
+
JSON.parse('{"foo": 1}');
-

先頭のゼロと小数点

+

先頭のゼロと小数点

01 のような先頭の 0 は使用できません。また、小数点の後には少なくとも 1 桁以上が続かなければなりません。

-
JSON.parse('{"foo": 01}');
+
JSON.parse('{"foo": 01}');
 // SyntaxError: JSON.parse: expected ',' or '}' after property value
 // in object at line 1 column 2 of the JSON data
 
@@ -100,14 +100,14 @@ JSON.parse('{"foo": 1.}');
 
 

0 を除いて 1 だけを書いてください。また、小数点の後には少なくとも 1 桁の数字を置いてください。

-
JSON.parse('{"foo": 1}');
+
JSON.parse('{"foo": 1}');
 JSON.parse('{"foo": 1.0}');
 
-

関連情報

+

関連情報

    -
  • {{jsxref("JSON")}}
  • -
  • {{jsxref("JSON.parse()")}}
  • -
  • {{jsxref("JSON.stringify()")}}
  • +
  • {{jsxref("JSON")}}
  • +
  • {{jsxref("JSON.parse()")}}
  • +
  • {{jsxref("JSON.stringify()")}}
-- cgit v1.2.3-54-g00ecf