From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- .../reference/errors/already_has_pragma/index.html | 42 ++++++ .../errors/array_sort_argument/index.html | 47 ++++++ .../reference/errors/bad_octal/index.html | 51 +++++++ .../reference/errors/bad_radix/index.html | 61 ++++++++ .../reference/errors/bad_regexp_flag/index.html | 106 +++++++++++++ .../errors/bad_return_or_yield/index.html | 55 +++++++ .../errors/called_on_incompatible_type/index.html | 72 +++++++++ .../index.html | 60 ++++++++ .../errors/cant_access_property/index.html | 59 ++++++++ .../errors/cant_assign_to_property/index.html | 55 +++++++ .../index.html | 64 ++++++++ .../reference/errors/cant_delete/index.html | 58 +++++++ .../errors/cant_redefine_property/index.html | 51 +++++++ .../errors/cyclic_object_value/index.html | 72 +++++++++ .../reference/errors/dead_object/index.html | 51 +++++++ .../errors/delete_in_strict_mode/index.html | 70 +++++++++ .../index.html | 75 +++++++++ .../deprecated_expression_closures/index.html | 82 ++++++++++ .../reference/errors/deprecated_octal/index.html | 66 ++++++++ .../errors/deprecated_source_map_pragma/index.html | 61 ++++++++ .../errors/deprecated_string_generics/index.html | 105 +++++++++++++ .../errors/deprecated_tolocaleformat/index.html | 91 +++++++++++ .../reference/errors/equal_as_assign/index.html | 54 +++++++ .../for-each-in_loops_are_deprecated/index.html | 168 +++++++++++++++++++++ .../reference/errors/getter_only/index.html | 83 ++++++++++ .../errors/identifier_after_number/index.html | 53 +++++++ .../reference/errors/illegal_character/index.html | 75 +++++++++ .../errors/in_operator_no_object/index.html | 75 +++++++++ .../ja/web/javascript/reference/errors/index.html | 25 +++ .../errors/invalid_array_length/index.html | 77 ++++++++++ .../invalid_assignment_left-hand_side/index.html | 54 +++++++ .../errors/invalid_const_assignment/index.html | 91 +++++++++++ .../reference/errors/invalid_date/index.html | 54 +++++++ .../errors/invalid_for-in_initializer/index.html | 75 +++++++++ .../errors/invalid_for-of_initializer/index.html | 64 ++++++++ .../index.html | 62 ++++++++ .../reference/errors/is_not_iterable/index.html | 105 +++++++++++++ .../reference/errors/json_bad_parse/index.html | 113 ++++++++++++++ .../errors/malformed_formal_parameter/index.html | 65 ++++++++ .../reference/errors/malformed_uri/index.html | 64 ++++++++ .../errors/missing_bracket_after_list/index.html | 56 +++++++ .../missing_colon_after_property_id/index.html | 77 ++++++++++ .../missing_curly_after_function_body/index.html | 67 ++++++++ .../missing_curly_after_property_list/index.html | 51 +++++++ .../errors/missing_formal_parameter/index.html | 80 ++++++++++ .../errors/missing_initializer_in_const/index.html | 59 ++++++++ .../missing_name_after_dot_operator/index.html | 68 +++++++++ .../index.html | 42 ++++++ .../missing_parenthesis_after_condition/index.html | 70 +++++++++ .../missing_semicolon_before_statement/index.html | 67 ++++++++ .../errors/more_arguments_needed/index.html | 48 ++++++ .../errors/negative_repetition_count/index.html | 44 ++++++ .../reference/errors/no_non-null_object/index.html | 66 ++++++++ .../reference/errors/no_properties/index.html | 40 +++++ .../reference/errors/no_variable_name/index.html | 90 +++++++++++ .../non_configurable_array_element/index.html | 78 ++++++++++ .../reference/errors/not_a_codepoint/index.html | 55 +++++++ .../reference/errors/not_a_constructor/index.html | 95 ++++++++++++ .../reference/errors/not_a_function/index.html | 122 +++++++++++++++ .../reference/errors/not_defined/index.html | 72 +++++++++ .../reference/errors/precision_range/index.html | 96 ++++++++++++ .../errors/property_access_denied/index.html | 51 +++++++ .../reference/errors/read-only/index.html | 81 ++++++++++ .../errors/redeclared_parameter/index.html | 61 ++++++++ .../index.html | 88 +++++++++++ .../errors/reserved_identifier/index.html | 80 ++++++++++ .../errors/resulting_string_too_large/index.html | 49 ++++++ .../reference/errors/stmt_after_return/index.html | 81 ++++++++++ .../errors/strict_non_simple_params/index.html | 111 ++++++++++++++ .../reference/errors/too_much_recursion/index.html | 119 +++++++++++++++ .../typed_array_invalid_arguments/index.html | 77 ++++++++++ .../reference/errors/undeclared_var/index.html | 67 ++++++++ .../reference/errors/undefined_prop/index.html | 59 ++++++++ .../reference/errors/unexpected_token/index.html | 81 ++++++++++ .../reference/errors/unexpected_type/index.html | 77 ++++++++++ .../errors/unnamed_function_statement/index.html | 115 ++++++++++++++ .../errors/unterminated_string_literal/index.html | 67 ++++++++ .../reference/errors/var_hides_argument/index.html | 56 +++++++ 78 files changed, 5574 insertions(+) create mode 100644 files/ja/web/javascript/reference/errors/already_has_pragma/index.html create mode 100644 files/ja/web/javascript/reference/errors/array_sort_argument/index.html create mode 100644 files/ja/web/javascript/reference/errors/bad_octal/index.html create mode 100644 files/ja/web/javascript/reference/errors/bad_radix/index.html create mode 100644 files/ja/web/javascript/reference/errors/bad_regexp_flag/index.html create mode 100644 files/ja/web/javascript/reference/errors/bad_return_or_yield/index.html create mode 100644 files/ja/web/javascript/reference/errors/called_on_incompatible_type/index.html create mode 100644 files/ja/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html create mode 100644 files/ja/web/javascript/reference/errors/cant_access_property/index.html create mode 100644 files/ja/web/javascript/reference/errors/cant_assign_to_property/index.html create mode 100644 files/ja/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html create mode 100644 files/ja/web/javascript/reference/errors/cant_delete/index.html create mode 100644 files/ja/web/javascript/reference/errors/cant_redefine_property/index.html create mode 100644 files/ja/web/javascript/reference/errors/cyclic_object_value/index.html create mode 100644 files/ja/web/javascript/reference/errors/dead_object/index.html create mode 100644 files/ja/web/javascript/reference/errors/delete_in_strict_mode/index.html create mode 100644 files/ja/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html create mode 100644 files/ja/web/javascript/reference/errors/deprecated_expression_closures/index.html create mode 100644 files/ja/web/javascript/reference/errors/deprecated_octal/index.html create mode 100644 files/ja/web/javascript/reference/errors/deprecated_source_map_pragma/index.html create mode 100644 files/ja/web/javascript/reference/errors/deprecated_string_generics/index.html create mode 100644 files/ja/web/javascript/reference/errors/deprecated_tolocaleformat/index.html create mode 100644 files/ja/web/javascript/reference/errors/equal_as_assign/index.html create mode 100644 files/ja/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html create mode 100644 files/ja/web/javascript/reference/errors/getter_only/index.html create mode 100644 files/ja/web/javascript/reference/errors/identifier_after_number/index.html create mode 100644 files/ja/web/javascript/reference/errors/illegal_character/index.html create mode 100644 files/ja/web/javascript/reference/errors/in_operator_no_object/index.html create mode 100644 files/ja/web/javascript/reference/errors/index.html create mode 100644 files/ja/web/javascript/reference/errors/invalid_array_length/index.html create mode 100644 files/ja/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html create mode 100644 files/ja/web/javascript/reference/errors/invalid_const_assignment/index.html create mode 100644 files/ja/web/javascript/reference/errors/invalid_date/index.html create mode 100644 files/ja/web/javascript/reference/errors/invalid_for-in_initializer/index.html create mode 100644 files/ja/web/javascript/reference/errors/invalid_for-of_initializer/index.html create mode 100644 files/ja/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html create mode 100644 files/ja/web/javascript/reference/errors/is_not_iterable/index.html create mode 100644 files/ja/web/javascript/reference/errors/json_bad_parse/index.html create mode 100644 files/ja/web/javascript/reference/errors/malformed_formal_parameter/index.html create mode 100644 files/ja/web/javascript/reference/errors/malformed_uri/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_bracket_after_list/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_colon_after_property_id/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_curly_after_function_body/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_curly_after_property_list/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_formal_parameter/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_initializer_in_const/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_name_after_dot_operator/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html create mode 100644 files/ja/web/javascript/reference/errors/missing_semicolon_before_statement/index.html create mode 100644 files/ja/web/javascript/reference/errors/more_arguments_needed/index.html create mode 100644 files/ja/web/javascript/reference/errors/negative_repetition_count/index.html create mode 100644 files/ja/web/javascript/reference/errors/no_non-null_object/index.html create mode 100644 files/ja/web/javascript/reference/errors/no_properties/index.html create mode 100644 files/ja/web/javascript/reference/errors/no_variable_name/index.html create mode 100644 files/ja/web/javascript/reference/errors/non_configurable_array_element/index.html create mode 100644 files/ja/web/javascript/reference/errors/not_a_codepoint/index.html create mode 100644 files/ja/web/javascript/reference/errors/not_a_constructor/index.html create mode 100644 files/ja/web/javascript/reference/errors/not_a_function/index.html create mode 100644 files/ja/web/javascript/reference/errors/not_defined/index.html create mode 100644 files/ja/web/javascript/reference/errors/precision_range/index.html create mode 100644 files/ja/web/javascript/reference/errors/property_access_denied/index.html create mode 100644 files/ja/web/javascript/reference/errors/read-only/index.html create mode 100644 files/ja/web/javascript/reference/errors/redeclared_parameter/index.html create mode 100644 files/ja/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html create mode 100644 files/ja/web/javascript/reference/errors/reserved_identifier/index.html create mode 100644 files/ja/web/javascript/reference/errors/resulting_string_too_large/index.html create mode 100644 files/ja/web/javascript/reference/errors/stmt_after_return/index.html create mode 100644 files/ja/web/javascript/reference/errors/strict_non_simple_params/index.html create mode 100644 files/ja/web/javascript/reference/errors/too_much_recursion/index.html create mode 100644 files/ja/web/javascript/reference/errors/typed_array_invalid_arguments/index.html create mode 100644 files/ja/web/javascript/reference/errors/undeclared_var/index.html create mode 100644 files/ja/web/javascript/reference/errors/undefined_prop/index.html create mode 100644 files/ja/web/javascript/reference/errors/unexpected_token/index.html create mode 100644 files/ja/web/javascript/reference/errors/unexpected_type/index.html create mode 100644 files/ja/web/javascript/reference/errors/unnamed_function_statement/index.html create mode 100644 files/ja/web/javascript/reference/errors/unterminated_string_literal/index.html create mode 100644 files/ja/web/javascript/reference/errors/var_hides_argument/index.html (limited to 'files/ja/web/javascript/reference/errors') diff --git a/files/ja/web/javascript/reference/errors/already_has_pragma/index.html b/files/ja/web/javascript/reference/errors/already_has_pragma/index.html new file mode 100644 index 0000000000..ece0c870f4 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/already_has_pragma/index.html @@ -0,0 +1,42 @@ +--- +title: 'Warning: -file- is being assigned a //# sourceMappingURL, but already has one' +slug: Web/JavaScript/Reference/Errors/Already_has_pragma +tags: + - Errors + - JavaScript + - Source maps + - Warning +translation_of: Web/JavaScript/Reference/Errors/Already_has_pragma +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
Warning: -file- is being assigned a //# sourceMappingURL, but already has one.
+ +

エラータイプ

+ +

警告です。JavaScript の実行が停止されることはありません。

+ +

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

+ +

JavaScript ソースに対して、ソースマップが複数回指定されています。

+ +

より効率的にサーバから配信するため、しばしば JavaScript ソースの結合や縮小が行われます。 ソースマップを使用すると、デバッガーは実行されているコードとオリジナルのソースファイルをマッピングできます。ソースマップを割り当てるには、コメントを使用するか JavaScript ファイルにヘッダーを設定するかの 2 つの方法があります。

+ +

+ +

ファイルでコメントを使用してソースマップを設定します:

+ +
//# sourceMappingURL=http://example.com/path/to/your/sourcemap.map
+ +

あるいは、JavaScript ファイルにヘッダーを設定することもできます:

+ +
X-SourceMap: /path/to/file.js.map
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/array_sort_argument/index.html b/files/ja/web/javascript/reference/errors/array_sort_argument/index.html new file mode 100644 index 0000000000..11581e3d9b --- /dev/null +++ b/files/ja/web/javascript/reference/errors/array_sort_argument/index.html @@ -0,0 +1,47 @@ +--- +title: 'TypeError: invalid Array.prototype.sort argument' +slug: Web/JavaScript/Reference/Errors/Array_sort_argument +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Array_sort_argument +--- +
{{jsSidebar("Errors")}} +

メッセージ

+
+ +
TypeError: invalid Array.prototype.sort argument (Firefox)
+
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}

+ +

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

+ +

{{jsxref("Array.prototype.sort()")}} の引数には、{{jsxref("undefined")}} かオペランドを比較する関数のいずれかが求められれます。

+ +

+ +

無効なケース

+ +
[1, 3, 2].sort(5);  // TypeError
+
+var cmp = { asc: (x, y) => x >= y, dsc: (x, y) => x <= y };
+[1, 3, 2].sort(cmp[this.key] || 'asc');  // TypeError
+
+ +

有効なケース

+ +
[1, 3, 2].sort();   // [1, 2, 3]
+
+
+var cmp = { asc: (x, y) => x >= y, dsc: (x, y) => x <= y };
+[1, 3, 2].sort(cmp[this.key || 'asc']); // [1, 2, 3]
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/bad_octal/index.html b/files/ja/web/javascript/reference/errors/bad_octal/index.html new file mode 100644 index 0000000000..d3f5c51403 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/bad_octal/index.html @@ -0,0 +1,51 @@ +--- +title: 'SyntaxError: "x" is not a legal ECMA-262 octal constant' +slug: Web/JavaScript/Reference/Errors/Bad_octal +tags: + - Errors + - JavaScript + - Strict Mode + - SynataxError + - Warning +translation_of: Web/JavaScript/Reference/Errors/Bad_octal +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
Warning: SyntaxError: 08 is not a legal ECMA-262 octal constant.
+Warning: SyntaxError: 09 is not a legal ECMA-262 octal constant.
+
+ +

エラータイプ

+ +

strict モード でのみ、{{jsxref("SyntaxError")}} の警告が出ます。

+ +

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

+ +

小数リテラルは、そのほかの十進数が続くゼロ(0)から開始できますが、先頭の 0 以降の数値がすべて 8 以下の場合、数値は八進数として解釈されます。それゆえ、 0809 はあり得ないため、JavaScript はこれを警告します。

+ +

八進数リテラルと八進数エスケープシーケンスは非推奨であり、追加の非推奨警告が発生することに注意してください。ECMAScript 6 以降では、小文字または大文字のラテンリテラル "O"(0o0O)が続くゼロ始まりの構文が使用されます。詳細は、lexical grammar のページを見てください。

+ +

+ +

無効な八進数

+ +
08;
+09;
+// SyntaxError: 08 is not a legal ECMA-262 octal constant
+// SyntaxError: octal literals and octal escape sequences are deprecated
+ +

有効な八進数

+ +

"o" の文字が続くゼロを使用します。

+ +
0O755;
+0o644;
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/bad_radix/index.html b/files/ja/web/javascript/reference/errors/bad_radix/index.html new file mode 100644 index 0000000000..dfcf5f1591 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/bad_radix/index.html @@ -0,0 +1,61 @@ +--- +title: 'RangeError: radix must be an integer' +slug: Web/JavaScript/Reference/Errors/Bad_radix +tags: + - Errors + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Bad_radix +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
RangeError: radix must be an integer at least 2 and no greater than 36 (Firefox)
+RangeError: toString() radix argument must be between 2 and 36 (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("RangeError")}}

+ +

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

+ +

{{jsxref("Number.prototype.toString()")}} メソッドで、オプションの radix パラメーターを使用しています。このパラメーターは、数値を表すために使用するナンバーシステムを指定する 2 から 36 の整数(数)でなければなりません。

+ +

なぜ上限が 36 なのでしょうか?10 よりも大きい基数には、アルファベットが数値として用いられます。ラテンアルファベットは 26 文字しかないため、基数は 36 以上にはできません。

+ +

一般的な基数として、以下のものを使用します:

+ + + +

+ +

無効なケース

+ +
(42).toString(0);
+(42).toString(1);
+(42).toString(37);
+(42).toString(150);
+// フォーマットのために、このような文字列は使用できません:
+(12071989).toString("MM-dd-yyyy");
+
+ +

有効なケース

+ +
(42).toString(2);     // "101010" (二進数)
+(13).toString(8);     // "15"     (八進数)
+(0x42).toString(10);  // "66"     (十進数)
+(100000).toString(16) // "186a0"  (十六進数)
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/bad_regexp_flag/index.html b/files/ja/web/javascript/reference/errors/bad_regexp_flag/index.html new file mode 100644 index 0000000000..cf05155777 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/bad_regexp_flag/index.html @@ -0,0 +1,106 @@ +--- +title: 'SyntaxError: invalid regular expression flag "x"' +slug: Web/JavaScript/Reference/Errors/Bad_regexp_flag +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Bad_regexp_flag +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: invalid regular expression flag "x" (Firefox)
+SyntaxError: Invalid regular expression flags (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}

+ +

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

+ +

コード内に、不正な正規表現フラグがあります。スラッシュで囲まれたパターンで構成される正規表現リテラルでは、フラグは 2 番目のフラグの後に定義されます。{{jsxref("RegExp")}} オブジェクトのコンストラクター関数 (2 つ目の引数)で定義することもできます。正規表現フラグは個別に使うこともできれば、好きな順序で複数使うこともできますが、ECMAScript では 5 つしかありません。

+ +

規表現にフラグを含めるには、次の構文を使用します:

+ +
var re = /pattern/flags;
+
+ +

または、

+ +
var re = new RegExp('pattern', 'flags');
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
正規表現フラグ
フラグ説明
gグローバルサーチ。
i大文字小文字を区別したサーチ。
m複数行サーチ
uユニコード; パターンを Unicode コードポイントシーケンスとして扱う。
y対象の文字列の現在の位置から一致を探す "sticky" サーチ。{{jsxref("RegExp.sticky", "sticky")}} を見てください。
+ +

+ +

有効な正規表現フラグは 5 つしかありません。

+ +
/foo/bar;
+
+// SyntaxError: invalid regular expression flag "b"
+
+ +

正規表現を生成するつもりでしたか?2 つのスラッシュを含む式は正規表現リテラルとして解釈されます。

+ +
let obj = {
+  url: /docs/Web
+};
+
+// SyntaxError: invalid regular expression flag "W"
+
+ +

または、文字列を生成するつもりでしたか?文字列リテラルを生成するためにはシングルコーテーション、またはダブルコーテーションを追記します。

+ +
let obj = {
+  url: '/docs/Web'
+};
+ +

有効な正規表現フラグ

+ +

JavaScript で使用できる 5 つの正規表現フラグについては、上述の表を見てください。

+ +
/foo/g;
+/foo/gim;
+/foo/uy;
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/bad_return_or_yield/index.html b/files/ja/web/javascript/reference/errors/bad_return_or_yield/index.html new file mode 100644 index 0000000000..2f749435aa --- /dev/null +++ b/files/ja/web/javascript/reference/errors/bad_return_or_yield/index.html @@ -0,0 +1,55 @@ +--- +title: 'SyntaxError: return not in function' +slug: Web/JavaScript/Reference/Errors/Bad_return_or_yield +tags: + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Bad_return_or_yield +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: return not in function
+SyntaxError: yield not in function
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}。

+ +

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

+ +

return ステートメントか yield ステートメントが、 関数 の外側で呼び出されました。どこかで、波括弧を忘れたのかもしれません。return ステートメントと yield ステートメントは、関数内で使用しなければなりません。なぜなら、これらのステートメントは、関数の実行を終了(または、停止や再開)し、関数の呼び出し元に返す値を指定するからです。

+ +

+ +
var cheer = function(score) {
+  if (score === 147)
+    return "Maximum!";
+  };
+  if (score > 100) {
+    return "Century!";
+  }
+}
+
+// SyntaxError: return not in function
+ +

一見して、波括弧は正しく見えますが、このコードスニペットでは、最初の if ステートメントの後の { を忘れています。正しくは以下のようにします:

+ +
var cheer = function(score) {
+  if (score === 147) {
+    return "Maximum!";
+  }
+  if (score > 100) {
+    return "Century!";
+  }
+};
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/called_on_incompatible_type/index.html b/files/ja/web/javascript/reference/errors/called_on_incompatible_type/index.html new file mode 100644 index 0000000000..aaf0d62155 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/called_on_incompatible_type/index.html @@ -0,0 +1,72 @@ +--- +title: 'TypeError: X.prototype.y called on incompatible type' +slug: Web/JavaScript/Reference/Errors/Called_on_incompatible_type +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Called_on_incompatible_type +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の例外 "called on incompatible target (or object)" は、関数が (与えられたオブジェクト上で) 呼び出されたときに、関数が期待する型に対応していない this を使用して呼び出された場合に発生します。

+ +

メッセージ

+ +
TypeError: 'this' is not a Set object (EdgE)
+TypeError: Function.prototype.toString called on incompatible object (Firefox)
+TypeError: Function.prototype.bind called on incompatible target (Firefox)
+TypeError: Method Set.prototype.add called on incompatible receiver undefined (Chrome)
+TypeError: Bind must be called on a function (Chrome)
+
+ +

エラー種別

+ +

{{jsxref("TypeError")}}

+ +

原因

+ +

このエラーがスローされる場合、(指定されたオブジェクト上の) 関数が、関数が予期する型に対応していない this と共に呼び出されています。

+ +

この問題は {{jsxref("Function.prototype.call()")}} メソッドか {{jsxref("Function.prototype.apply()")}} メソッドを使用して、予期していない型の this 引数を渡した場合に発生します。

+ +

この問題は、オブジェクトのプロパティとして格納されている関数を他の関数の引数として提供する場合にも発生します。この場合、関数を格納しているオブジェクトは、他の関数から呼び出されたときに、その関数の this のターゲットにはなりません。この問題を回避するには、呼び出しを行っているラムダを提供するか、 {{jsxref("Function.prototype.bind()")}} 関数を使用して this 引数を期待されるオブジェクトに強制的に渡す必要があります。

+ +

+ +

無効な場合

+ +
var mySet = new Set;
+['bar', 'baz'].forEach(mySet.add);
+// mySet.add is a function, but "mySet" is not captured as this.
+
+var myFun = function () {
+  console.log(this);
+};
+['bar', 'baz'].forEach(myFun.bind);
+// myFun.bind is a function, but "myFun" is not captured as this.
+
+
+ +

妥当な場合

+ +
var mySet = new Set;
+['bar', 'baz'].forEach(mySet.add.bind(mySet));
+// This works due to binding "mySet" as this.
+
+var myFun = function () {
+  console.log(this);
+};
+['bar', 'baz'].forEach(x => myFun.bind(x));
+// This works using the "bind" function. It creates a lambda forwarding the argument.
+
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html b/files/ja/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html new file mode 100644 index 0000000000..b6c629ee38 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/cant_access_lexical_declaration_before_init/index.html @@ -0,0 +1,60 @@ +--- +title: 'ReferenceError: can''t access lexical declaration`X'' before initialization' +slug: Web/JavaScript/Reference/Errors/Cant_access_lexical_declaration_before_init +tags: + - Errors + - JavaScript + - ReferemceError +translation_of: Web/JavaScript/Reference/Errors/Cant_access_lexical_declaration_before_init +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
ReferenceError: can't access lexical declaration `X' before initialization (Firefox)
+ReferenceError: 'x' is not defined (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("ReferenceError")}}

+ +

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

+ +

初期化前に語彙変数にアクセスしました。これはブロックステートメント内で、定義される前にletconst 宣言にアクセスすると発生します。

+ +

+ +

不正な場合

+ +

この場合、変数 "foo" はブロックステートメント内で let を使用して再宣言されています。

+ +
function test() {
+  let foo = 33;
+  if (true) {
+    let foo = (foo + 55);
+    // ReferenceError: can't access lexical
+    // declaration `foo' before initialization
+  }
+}
+test();
+
+ +

有効な場合

+ +

"foo" を if ステートメント内に変更するには、再宣言の原因となる let を取り除きます。

+ +
function test(){
+   let foo = 33;
+   if (true) {
+      foo = (foo + 55);
+   }
+}
+test();
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/cant_access_property/index.html b/files/ja/web/javascript/reference/errors/cant_access_property/index.html new file mode 100644 index 0000000000..b9bd300b79 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/cant_access_property/index.html @@ -0,0 +1,59 @@ +--- +title: 'TypeError: can''t access property "x" of "y"' +slug: Web/JavaScript/Reference/Errors/Cant_access_property +tags: + - Error + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cant_access_property +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: Unable to get property {x} of undefined or null reference (Edge)
+TypeError: can't access property {x} of {y} (Firefox)
+TypeError: {y} is undefined, can't access property {x} of it (Firefox)
+TypeError: {y} is null, can't access property {x} of it (Firefox)
+
+Examples:
+TypeError: x is undefined, can't access property "prop" of it
+TypeError: x is null, can't access property "prop" of it
+TypeError: can't access property "prop" of undefined
+TypeError: can't access property "prop" of null
+
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}。

+ +

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

+ +

{{jsxref("undefined")}} か {{jsxref("null")}} に対してプロパティアクセスを行いました。

+ +

+ +

無効なケース

+ +
// undefined and null cases on which the substring method won't work
+var foo = undefined;
+foo.substring(1); // TypeError: x is undefined, can't access property "substring" of it
+
+var foo = null;
+foo.substring(1); // TypeError: x is null, can't access property "substring" of it
+
+ +

問題解決

+ +

undefinednull の null pointer アクセスを修正するには、たとえば typeof 演算子を使用できます。

+ +
if (typeof foo !== 'undefined') {
+  // Now we know that foo is defined, we are good to go.
+}
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/cant_assign_to_property/index.html b/files/ja/web/javascript/reference/errors/cant_assign_to_property/index.html new file mode 100644 index 0000000000..8a9564ddc4 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/cant_assign_to_property/index.html @@ -0,0 +1,55 @@ +--- +title: 'TypeError: can''t assign to property "x" on "y": not an object' +slug: Web/JavaScript/Reference/Errors/Cant_assign_to_property +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cant_assign_to_property +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: can't assign to property "x" on {y}: not an object (Firefox)
+TypeError: Cannot create property 'x' on {y} (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}.

+ +

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

+ +

In {{jsxref("Strict_mode")}}, a {{jsxref("TypeError")}} is raised when attempting to create a property on {{Glossary("primitive")}} value such as a {{Glossary("symbol")}}, a {{Glossary("string")}}, a {{Glossary("number")}} or a {{Glossary("boolean")}}. {{Glossary("Primitive")}} values cannot hold any {{Glossary("property/JavaScript", "property")}}.

+ +

The problem might be that an unexpected value is flowing at an unexpected place, or that an object variant of a {{jsxref("String")}} or a {{jsxref("Number")}} is expected.

+ +

+ +

無効なケース

+ +
'use strict';
+
+var foo = "my string";
+// The following line does nothing if not in strict mode.
+foo.bar = {}; // TypeError: can't assign to property "bar" on "my string": not an object
+
+ +

問題を修正する

+ +

Either fix the code to prevent the {{Glossary("primitive")}} from being used in such places, or fix the issue is to create the object equivalent {{jsxref("Object")}}.

+ +
'use strict';
+
+var foo = new String("my string");
+foo.bar = {};
+
+ +

あわせて参照

+ + diff --git a/files/ja/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html b/files/ja/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html new file mode 100644 index 0000000000..cc0eeecd06 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/cant_define_property_object_not_extensible/index.html @@ -0,0 +1,64 @@ +--- +title: 'TypeError: can''t define property "x": "obj" is not extensible' +slug: Web/JavaScript/Reference/Errors/Cant_define_property_object_not_extensible +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cant_define_property_object_not_extensible +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: can't define property "x": "obj" is not extensible (Firefox)
+TypeError: Cannot define property: "x", object is not extensible. (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}

+ +

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

+ +

通常、オブジェクトは拡張可能で、新しいプロパティを追加できます。しかしこの場合は、{{jsxref("Object.preventExtensions()")}} がオブジェクトをもはや拡張できないものに設定しているため、拡張不可のマークが付けられたときにあったプロパティ以上のプロパティを追加できません。

+ +

+ +

strict モードでは、拡張不可のオブジェクトに新しいプロパティを追加しようとすると TypeError をスローします。非 strict モードでは、"x" プロパティの追加は暗黙的に無視されます。

+ +
'use strict';
+
+var obj = {};
+Object.preventExtensions(obj);
+
+obj.x = 'foo';
+// TypeError: can't define property "x": "obj" is not extensible
+
+ +

strict モードと非 strict モード共に、拡張不可のオブジェクトに新しいプロパティを追加しようとして {{jsxref("Object.defineProperty()")}} を呼び出すと、例外をスローします。

+ +
var obj = { };
+Object.preventExtensions(obj);
+
+Object.defineProperty(obj,
+  'x', { value: "foo" }
+);
+// TypeError: can't define property "x": "obj" is not extensible
+
+ +

このエラーを修正するには、{{jsxref("Object.preventExtensions()")}} の呼び出しを削除するか、オブジェクトが拡張不可とマークされる前にプロパティを追加するように移動する必要があります。もちろん、必要がないのであれば、追加しようとしているプロパティを削除しても良いです。

+ +
'use strict';
+
+var obj = {};
+obj.x = 'foo'; // add property first and only then prevent extensions
+
+Object.preventExtensions(obj);
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/cant_delete/index.html b/files/ja/web/javascript/reference/errors/cant_delete/index.html new file mode 100644 index 0000000000..2e2a44b27d --- /dev/null +++ b/files/ja/web/javascript/reference/errors/cant_delete/index.html @@ -0,0 +1,58 @@ +--- +title: 'TypeError: property "x" is non-configurable and can''t be deleted' +slug: Web/JavaScript/Reference/Errors/Cant_delete +tags: + - Errors + - JavaScript + - Strict Mode + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cant_delete +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: property "x" is non-configurable and can't be deleted. (Firefox)
+TypeError: Cannot delete property 'x' of #<Object> (Chrome)
+
+ +

エラータイプ

+ +

strict モードでのみ、{{jsxref("TypeError")}} の警告が出ます。

+ +

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

+ +

プロパティを削除しようとしましたが、プロパティが non-configurable でした。configurable 属性は、オブジェクトからプロパティを削除できるかどうか、および(writable を除く)属性を変更できるかどうかを制御します。

+ +

このエラーは、strict モードのコード でのみ発生します。非 strict コードでは、この操作は false を返します。

+ +

+ +

non-configurable プロパティは、さほど一般的ではありませんが、{{jsxref("Object.defineProperty()")}} か {{jsxref("Object.freeze()")}} を使用して生成できます。

+ +
"use strict";
+var obj = Object.freeze({name: "Elsa", score: 157});
+delete obj.score;  // TypeError
+
+"use strict";
+var obj = {};
+Object.defineProperty(obj, "foo", {value: 2, configurable: false});
+delete obj.foo;  // TypeError
+
+"use strict";
+var frozenArray = Object.freeze([0, 1, 2]);
+frozenArray.pop();  // TypeError
+
+ +

JavaScript に組み込まれた、少数の non-configurable プロパティもあります。もしかしたら、Math の定数を削除しようとしたのかもしれません。

+ +
"use strict";
+delete Math.PI;  // TypeError
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/cant_redefine_property/index.html b/files/ja/web/javascript/reference/errors/cant_redefine_property/index.html new file mode 100644 index 0000000000..ff44eddad5 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/cant_redefine_property/index.html @@ -0,0 +1,51 @@ +--- +title: 'TypeError: can''t redefine non-configurable property "x"' +slug: Web/JavaScript/Reference/Errors/Cant_redefine_property +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cant_redefine_property +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: can't redefine non-configurable property "x" (Firefox)
+TypeError: Cannot redefine property: "x" (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}

+ +

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

+ +

プロパティを再定義しようとしましたが、そのプロパティは設定不可です。configurable 属性は、プロパティをオブジェクトから削除できるかどうか、および (writable 以外で) 変更できるかどうかを制御します。通常、オブジェクト初期化子で生成されたオブジェクトのプロパティは、変更可能です。しかし、{{jsxref("Object.defineProperty()")}} を使用した場合などは、既定でプロパティを修正できません。

+ +

+ +

Object.defineProperty で生成された設定不可のプロパティ

+ +

設定可能にしたくない場合、{{jsxref("Object.defineProperty()")}} は設定不可のプロパティを生成します。

+ +
var obj = Object.create({});
+Object.defineProperty(obj, "foo", {value: "bar"});
+
+Object.defineProperty(obj, "foo", {value: "baz"});
+// TypeError: can't redefine non-configurable property "foo"
+
+ +

後のコードで再定義するためには、"foo" プロパティを設定可能にする必要があります。

+ +
var obj = Object.create({});
+Object.defineProperty(obj, "foo", {value: "bar", configurable: true});
+Object.defineProperty(obj, "foo", {value: "baz", configurable: true});
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/cyclic_object_value/index.html b/files/ja/web/javascript/reference/errors/cyclic_object_value/index.html new file mode 100644 index 0000000000..0731056c8f --- /dev/null +++ b/files/ja/web/javascript/reference/errors/cyclic_object_value/index.html @@ -0,0 +1,72 @@ +--- +title: 'TypeError: cyclic object value' +slug: Web/JavaScript/Reference/Errors/Cyclic_object_value +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Cyclic_object_value +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の例外 "cyclic object value" は、 JSON の中にオブジェクトの参照が見つかったときに発生します。 {{jsxref("JSON.stringify()")}} はこれを解決しようとせず、これによって失敗します。

+ +

メッセージ

+ +
TypeError: cyclic object value (Firefox)
+TypeError: Converting circular structure to JSON (Chrome and Opera)
+TypeError: Circular reference in value argument not supported (Edge)
+
+ +

エラー種別

+ +

{{jsxref("TypeError")}}

+ +

エラーの原因

+ +

JSON 形式はオブジェクト参照に対応していません (IETF の草案はありますが)。したがって {{jsxref("JSON.stringify()")}} はこれを解決しようとせず、これによって失敗します。

+ +

+ +

循環参照

+ +

次のような循環構造体では、

+ +
var circularReference = {otherData: 123};
+circularReference.myself = circularReference;
+
+ +

{{jsxref("JSON.stringify()")}} は失敗します。

+ +
JSON.stringify(circularReference);
+// TypeError: cyclic object value
+
+ +

循環参照をシリアライズするには、それに対応したライブラリ (例えば cycle.js) を使用したり、自分自身で循環参照を探してシリアライズ可能な値に置き換える (または削除する) ことを求める解決策を実装することもできます。

+ +

次のスニペットは、 {{jsxref("JSON.stringify()")}} の replacer 引数を使用して循環参照を検索してフィルタリングする方法を示しています (これによりデータ損失が発生します)。

+ +
const getCircularReplacer = () => {
+  const seen = new WeakSet();
+  return (key, value) => {
+    if (typeof value === "object" && value !== null) {
+      if (seen.has(value)) {
+        return;
+      }
+      seen.add(value);
+    }
+    return value;
+  };
+};
+
+JSON.stringify(circularReference, getCircularReplacer());
+// {"otherData":123}
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/dead_object/index.html b/files/ja/web/javascript/reference/errors/dead_object/index.html new file mode 100644 index 0000000000..b45b644b14 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/dead_object/index.html @@ -0,0 +1,51 @@ +--- +title: 'TypeError: can''t access dead object' +slug: Web/JavaScript/Reference/Errors/Dead_object +tags: + - Addon + - Addons + - Error + - Errors + - JavaScript +translation_of: Web/JavaScript/Reference/Errors/Dead_object +--- +
{{JSSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: can't access dead object
+
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}

+ +

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

+ +

メモリ使用の向上とメモリリーク防止のため、Firefox はアドオンに対して、親ドキュメントが破棄された後に DOM オブジェクトへ強い参照を保持することをできなくしています。死んだオブジェクトは、DOM で棄された後にもかかわらず、存続する DOM 要素への強い参照を保持しています。この問題を回避するために、外部ドキュメント内の DOM ノードへの参照を、そのドキュメントに固有のオブジェクトに格納し、ドキュメントがアンロードされるときにクリーンアップするか、または弱い参照にするべきです。

+ +

オブジェクトが破棄されているか確認する

+ +

Components.utils は特権コードで使用できる isDeadWrapper() メソッドを提供しています。

+ +
if (Components.utils.isDeadWrapper(window)) {
+  // dead
+}
+ +

非特権コードは Component.utils にアクセスできないため、例外をキャッチするしかありません。

+ +
try {
+  String(window);
+}
+catch (e) {
+  console.log("window is likely dead");
+}
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/delete_in_strict_mode/index.html b/files/ja/web/javascript/reference/errors/delete_in_strict_mode/index.html new file mode 100644 index 0000000000..0a96a3c13f --- /dev/null +++ b/files/ja/web/javascript/reference/errors/delete_in_strict_mode/index.html @@ -0,0 +1,70 @@ +--- +title: >- + SyntaxError: applying the 'delete' operator to an unqualified name is + deprecated +slug: Web/JavaScript/Reference/Errors/Delete_in_strict_mode +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Delete_in_strict_mode +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: applying the 'delete' operator to an unqualified name is deprecated (Firefox)
+SyntaxError: Delete of an unqualified identifier in strict mode. (Chrome)
+
+ +

エラータイプ

+ +

strict モード でのみ {{jsxref("SyntaxError")}}。

+ +

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

+ +

JavaScript では、通常の変数を delete 演算子で削除できません。strict モードで、変数を削除しようとするとエラーがスローされ、削除できません。

+ +

delete 演算子は、オブジェクトのプロパティのみ削除できます。オブジェクトプロパティは、設定可能な場合は "修飾" されます。

+ +

一般的に信じられていることと異なり、delete 演算子は直接的なメモリーを開放とは関係ありません。メモリー管理は、参照の開放によって間接的に行われます。memory management ページと delete 演算子ページで詳細を確認してください。

+ +

このエラーは、strict mode モードでのみ発生します。非 strict モードでは、演算子はただ false を返します。

+ +

+ +

プレーンな変数を削除しようとすると、JavaScript では動作せず、strict モードだとエラーをスローします:

+ +
'use strict';
+
+var x;
+
+// ...
+
+delete x;
+
+// SyntaxError: applying the 'delete' operator to an unqualified name
+// is deprecated
+
+ +

変数のコンテンツを開放するには、{{jsxref("null")}} を設定します:

+ +
'use strict';
+
+var x;
+
+// ...
+
+x = null;
+
+// x can be garbage collected
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html b/files/ja/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html new file mode 100644 index 0000000000..74bbfce1a4 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/deprecated_caller_or_arguments_usage/index.html @@ -0,0 +1,75 @@ +--- +title: 'ReferenceError: deprecated caller or arguments usage' +slug: Web/JavaScript/Reference/Errors/Deprecated_caller_or_arguments_usage +tags: + - Errors + - JavaScript + - Strict Mode + - Warning +translation_of: Web/JavaScript/Reference/Errors/Deprecated_caller_or_arguments_usage +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
Warning: ReferenceError: deprecated caller usage (Firefox)
+Warning: ReferenceError: deprecated arguments usage (Firefox)
+TypeError: 'callee' and 'caller' cannot be accessed in strict mode. (Safari)
+
+ +

エラータイプ

+ +

strict モードでのみ、{{jsxref("ReferenceError")}} の警告が発生します。JavaScript の実行は、停止しません。

+ +

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

+ +

strict モード で、{{jsxref("Function.caller")}} か {{jsxref("Function.arguments")}} が使われていますが、それらは使用すべきではありません。なぜならば、それらは関数の呼び出し元をリークし、非標準で、最適化が困難、かつ性能に対して有害な機能のため、非推奨です。

+ +

+ +

非推奨の function.callerarguments.callee.caller

+ +

{{jsxref("Function.caller")}} と arguments.callee.caller は非推奨です(詳細は参照記事を見てください)。

+ +
"use strict";
+
+function myFunc() {
+  if (myFunc.caller == null) {
+    return 'The function was called from the top!';
+  } else {
+    return 'This function\'s caller was ' + myFunc.caller;
+  }
+}
+
+myFunc();
+// Warning: ReferenceError: deprecated caller usage
+// "The function was called from the top!"
+ +

Function.arguments

+ +

{{jsxref("Function.arguments")}} は非推奨です(詳細は参照記事を見てください)。

+ +
"use strict";
+
+function f(n) { g(n - 1); }
+
+function g(n) {
+  console.log('before: ' + g.arguments[0]);
+  if (n > 0) { f(n); }
+  console.log('after: ' + g.arguments[0]);
+}
+
+f(2);
+
+console.log('returned: ' + g.arguments);
+// Warning: ReferenceError: deprecated arguments usage
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/deprecated_expression_closures/index.html b/files/ja/web/javascript/reference/errors/deprecated_expression_closures/index.html new file mode 100644 index 0000000000..65c4262c61 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/deprecated_expression_closures/index.html @@ -0,0 +1,82 @@ +--- +title: 'Warning: expression closures are deprecated' +slug: Web/JavaScript/Reference/Errors/Deprecated_expression_closures +tags: + - JavaScript + - Warning + - エラー + - 警告 +translation_of: Web/JavaScript/Reference/Errors/Deprecated_expression_closures +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の警告 "expression closures are deprecated" は、標準外の式クロージャ構文 (略記関数構文) が使用されたときに発生します。

+ +

メッセージ

+ +
Warning: expression closures are deprecated
+
+ +

エラー種別

+ +

警告。 JavaScript の実行は中断されません。

+ +

原因

+ +

標準外の式クロージャ構文 (略記関数構文) は非推奨のため、使用すべきではありません。この構文は bug 1083458 で削除予定であり、削除された後は {{jsxref("SyntaxError")}} が発生します。

+ +

+ +

非推奨の構文

+ +

式クロージャで、中括弧を省略したり、関数宣言やメソッド定義で return 文を省略したりすることです。

+ +
var x = function() 1;
+
+var obj = {
+  count: function() 1
+};
+
+ +

標準の構文

+ +

標準外の式クロージャ構文から標準の ECMAScript 構文に変換するためには、波括弧と return ステートメントを追加します。

+ +
var x = function() { return 1; }
+
+var obj = {
+  count: function() { return 1; }
+};
+
+ +

アロー関数を使用した標準の構文

+ +

代わりにアロー関数を使用することもできます。

+ +
var x = () => 1;
+ +

略記メソッド構文を使用した標準構文

+ +

次のように、式クロージャがゲッターとセッターにも見られることがあります。

+ +
var obj = {
+  get x() 1,
+  set x(v) this.v = v
+};
+
+ +

ES2015 のメソッド定義で、次のように変換することができます。

+ +
var obj = {
+  get x() { return 1 },
+  set x(v) { this.v = v }
+};
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/deprecated_octal/index.html b/files/ja/web/javascript/reference/errors/deprecated_octal/index.html new file mode 100644 index 0000000000..e4e6034b5b --- /dev/null +++ b/files/ja/web/javascript/reference/errors/deprecated_octal/index.html @@ -0,0 +1,66 @@ +--- +title: 'SyntaxError: "0"-prefixed octal literals and octal escape seq. are deprecated' +slug: Web/JavaScript/Reference/Errors/Deprecated_octal +tags: + - Error + - Errors + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Deprecated_octal +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError:
+"0"-prefixed octal literals and octal escape sequences are deprecated;
+for octal literals use the \"0o\" prefix instead
+
+ +

エラータイプ

+ +

strict モードでのみ {{jsxref("SyntaxError")}}。

+ +

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

+ +

8 進文字と 8 進エスケープシーケンスは非推奨で、strict モードでは {{jsxref("SyntaxError")}} をスローします。ECMAScript 2015 以降では、標準文法として 0 から始まり大文字、または小文字のラテン文字 "O" (0o or 0O) が続く文法を使用します。

+ +

+ +

"0" 接頭辞付きの 8 進文字

+ +
"use strict";
+
+03;
+
+// SyntaxError: "0"-prefixed octal literals and octal escape sequences
+// are deprecated
+ +

8 進エスケープシーケンス

+ +
"use strict";
+
+"\251";
+
+// SyntaxError: "0"-prefixed octal literals and octal escape sequences
+// are deprecated
+
+ +

有効な 8 進数

+ +

0 に "o" か "O" が続くものを使用します:

+ +
0o3;
+
+ +

8 進エスケープシーケンスの代わりに、16 進エスケープシーケンスを使用できます:

+ +
'\xA9';
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/deprecated_source_map_pragma/index.html b/files/ja/web/javascript/reference/errors/deprecated_source_map_pragma/index.html new file mode 100644 index 0000000000..8f64fafdfb --- /dev/null +++ b/files/ja/web/javascript/reference/errors/deprecated_source_map_pragma/index.html @@ -0,0 +1,61 @@ +--- +title: >- + SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# + instead +slug: Web/JavaScript/Reference/Errors/Deprecated_source_map_pragma +tags: + - Error + - Errors + - JavaScript + - Source maps +translation_of: Web/JavaScript/Reference/Errors/Deprecated_source_map_pragma +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の警告 "Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead" は、 JavaScript の非推奨のソースマップ構文があったときに発生します。

+ +

メッセージ

+ +
Warning: SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
+
+Warning: SyntaxError: Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead
+
+ +

エラー種別

+ +

{{jsxref("SyntaxError")}} が発生したという警告です。 JavaScript の実行は停止しません。

+ +

エラーの原因

+ +

JavaScript のソースに非推奨のソースマップ構文があることです。

+ +

通常 JavaScript ソースは、サーバーからの提供を効率化するために、結合と最小化が行われます。ソースマップがあると、デバッガーが実行中のコードを元のソースファイルに対応付けすることができます。

+ +

IE の JScript エンジンは、//@cc_on の後でページが見つかると、条件付きコンパイルの有効化とみなします。 この IE での競合のために、ソースマップの仕様の構文が変更されました。IE の @cc_on 文 はあまり知られていない機能ですが、jQuery やそのほかのライブラリのソースマップを破壊します。

+ +

+ +

非推奨の構文

+ +

"@" 記号による構文は非推奨です。

+ +
//@ sourceMappingURL=http://example.com/path/to/your/sourcemap.map
+
+ +

標準の構文

+ +

代わりに "#" 記号を使用してください。

+ +
//# sourceMappingURL=http://example.com/path/to/your/sourcemap.map
+ +

あるいは、JavaScript ファイルに {{HTTPHeader("SourceMap")}} ヘッダーを設定して、コメントを全く表示しないようにすることもできます。

+ +
SourceMap: /path/to/file.js.map
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/deprecated_string_generics/index.html b/files/ja/web/javascript/reference/errors/deprecated_string_generics/index.html new file mode 100644 index 0000000000..24759a56a9 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/deprecated_string_generics/index.html @@ -0,0 +1,105 @@ +--- +title: 'Warning: String.x is deprecated; use String.prototype.x instead' +slug: Web/JavaScript/Reference/Errors/Deprecated_String_generics +tags: + - JavaScript + - Warning + - エラー + - 警告 +translation_of: Web/JavaScript/Reference/Errors/Deprecated_String_generics +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の警告で、 Firefox 68 以前で使用されていた String ジェネリックに関するものです。 String ジェネリックは Firefox 68 から削除されました。

+ +

メッセージ

+ +
Warning: String.charAt            is deprecated; use String.prototype.charAt            instead
+Warning: String.charCodeAt        is deprecated; use String.prototype.charCodeAt        instead
+Warning: String.concat            is deprecated; use String.prototype.concat            instead
+Warning: String.contains          is deprecated; use String.prototype.contains          instead
+Warning: String.endsWith          is deprecated; use String.prototype.endsWith          instead
+Warning: String.includes          is deprecated; use String.prototype.includes          instead
+Warning: String.indexOf           is deprecated; use String.prototype.indexOf           instead
+Warning: String.lastIndexOf       is deprecated; use String.prototype.lastIndexOf       instead
+Warning: String.localeCompare     is deprecated; use String.prototype.localeCompare     instead
+Warning: String.match             is deprecated; use String.prototype.match             instead
+Warning: String.normalize         is deprecated; use String.prototype.normalize         instead
+Warning: String.replace           is deprecated; use String.prototype.replace           instead
+Warning: String.search            is deprecated; use String.prototype.search            instead
+Warning: String.slice             is deprecated; use String.prototype.slice             instead
+Warning: String.split             is deprecated; use String.prototype.split             instead
+Warning: String.startsWith        is deprecated; use String.prototype.startsWith        instead
+Warning: String.substr            is deprecated; use String.prototype.substr            instead
+Warning: String.substring         is deprecated; use String.prototype.substring         instead
+Warning: String.toLocaleLowerCase is deprecated; use String.prototype.toLocaleLowerCase instead
+Warning: String.toLocaleUpperCase is deprecated; use String.prototype.toLocaleUpperCase instead
+Warning: String.toLowerCase       is deprecated; use String.prototype.toLowerCase       instead
+Warning: String.toUpperCase       is deprecated; use String.prototype.toUpperCase       instead
+Warning: String.trim              is deprecated; use String.prototype.trim              instead
+Warning: String.trimLeft          is deprecated; use String.prototype.trimLeft          instead
+Warning: String.trimRight         is deprecated; use String.prototype.trimRight         instead
+
+ +

エラー種別

+ +

警告。 JavaScript の実行は中断されません。

+ +

原因

+ +

標準外のジェネリック {{jsxref("String")}} のメソッドは非推奨であり、 Firefox 68 で削除されました。 String ジェネリックは、 String インスタンスメソッドを String オブジェクトに提供し、 String の「メソッドを任意のオブジェクトに適用できるようにします。

+ +

+ +

非推奨の構文

+ +
var num = 15;
+String.replace(num, /5/, '2');
+ +

標準の構文

+ +
var num = 15;
+String(num).replace(/5/, '2');
+
+ +

Shim

+ +

対応していないブラウザーで対応できるようにするための Shim です。

+ +
/*globals define*/
+// Assumes all supplied String instance methods already present
+// (one may use shims for these if not available)
+(function() {
+  'use strict';
+
+  var i,
+    // We could also build the array of methods with the following, but the
+    //   getOwnPropertyNames() method is non-shimable:
+    // Object.getOwnPropertyNames(String).filter(function(methodName) {
+    //   return typeof String[methodName] === 'function';
+    // });
+    methods = [
+      'contains', 'substring', 'toLowerCase', 'toUpperCase', 'charAt',
+      'charCodeAt', 'indexOf', 'lastIndexOf', 'startsWith', 'endsWith',
+      'trim', 'trimLeft', 'trimRight', 'toLocaleLowerCase', 'normalize',
+      'toLocaleUpperCase', 'localeCompare', 'match', 'search', 'slice',
+      'replace', 'split', 'substr', 'concat', 'localeCompare'
+    ],
+    methodCount = methods.length,
+    assignStringGeneric = function(methodName) {
+      var method = String.prototype[methodName];
+      String[methodName] = function(arg1) {
+        return method.apply(arg1, Array.prototype.slice.call(arguments, 1));
+      };
+    };
+
+  for (i = 0; i < methodCount; i++) {
+    assignStringGeneric(methods[i]);
+  }
+}());
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/deprecated_tolocaleformat/index.html b/files/ja/web/javascript/reference/errors/deprecated_tolocaleformat/index.html new file mode 100644 index 0000000000..685f3537d1 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/deprecated_tolocaleformat/index.html @@ -0,0 +1,91 @@ +--- +title: 'Warning: Date.prototype.toLocaleFormat is deprecated' +slug: Web/JavaScript/Reference/Errors/Deprecated_toLocaleFormat +tags: + - Error + - JavaScript + - Warning +translation_of: Web/JavaScript/Reference/Errors/Deprecated_toLocaleFormat +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
Warning: Date.prototype.toLocaleFormat is deprecated; consider using Intl.DateTimeFormat instead
+
+ +

エラー種別

+ +

警告。 JavaScript の実行は停止しません。

+ +

エラーの原因

+ +

非標準の {{jsxref("Date.prototype.toLocaleFormat")}} メソッドは非推奨のため、使用すべきではありません。これは C 言語の strftime() 関数が期待するものと同じフォーマットの文字列を使用します。この関数は Firefox 58 以降ではもう利用できません。

+ +

+ +

非推奨の構文

+ +

{{jsxref("Date.prototype.toLocaleFormat")}} メソッドは非推奨で、削除される予定です (クロスブラウザーの対応はなく、 Firefox でのみ使用できます)。

+ +
var today = new Date();
+var date = today.toLocaleFormat('%A, %e. %B %Y');
+
+console.log(date);
+// In German locale
+// "Freitag, 10. März 2017"
+ +

ECMAScript Intl API を使用した代わりの標準構文

+ +

ECMA-402 (ECMAScript Intl API) 標準では、言語に敏感な日付と時刻の書式設定を可能にする標準的なオブジェクトとメソッドを指定しています (Chrome 24+、Firefox 29+、IE11+、Safari10+ で使用できます)。

+ +

ある日付のフォーマットを指定する場合、{{jsxref("Date.prototype.toLocaleDateString")}} メソッドを使用すべきです。

+ +
var today = new Date();
+var options = { weekday: 'long', year: 'numeric',
+                month: 'long', day: 'numeric' };
+var date = today.toLocaleDateString('de-DE', options);
+
+console.log(date);
+// "Freitag, 10. März 2017"
+
+ +

または、{{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} オブジェクトを使用できます。これにより、ほとんど計算が完了したオブジェクトをキャッシュして、書式設定が高速になります。これは、日付のフォーマットを繰り返すときに役立ちます。

+ +
var options = { weekday: 'long', year: 'numeric',
+                month: 'long', day: 'numeric' };
+var dateFormatter = new Intl.DateTimeFormat('de-DE', options)
+
+var dates = [Date.UTC(2012, 11, 20, 3, 0, 0),
+             Date.UTC(2014, 04, 12, 8, 0, 0)];
+
+dates.forEach(date => console.log(dateFormatter.format(date)));
+
+// "Donnerstag, 20. Dezember 2012"
+// "Montag, 12. Mai 2014"
+
+ +

Date メソッドを使用した代わりの標準構文

+ +

{{jsxref("Date")}} オブジェクトは、カスタム日付文字列を構築するいくつかのメソッドを提供しています。

+ +
(new Date()).toLocaleFormat("%Y%m%d");
+// "20170310"
+
+ +

以下のように変換できます。

+ +
let now = new Date();
+let date = now.getFullYear() * 10000 +
+          (now.getMonth() + 1) * 100 + now.getDate();
+
+console.log(date);
+// "20170310"
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/equal_as_assign/index.html b/files/ja/web/javascript/reference/errors/equal_as_assign/index.html new file mode 100644 index 0000000000..e8fa400bf1 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/equal_as_assign/index.html @@ -0,0 +1,54 @@ +--- +title: 'SyntaxError: test for equality (==) mistyped as assignment (=)?' +slug: Web/JavaScript/Reference/Errors/Equal_as_assign +tags: + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Equal_as_assign +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
Warning: SyntaxError: test for equality (==) mistyped as assignment (=)?
+
+ +

エラータイプ

+ +

strict モード でのみ、{{jsxref("SyntaxError")}} の警告が出ます。

+ +

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

+ +

通常、等価テスト(==)が予想されるところで、代入 (=)が行われています。デバッグを行いやすくするために、(厳密な警告が可能になっている)JavaScript は、このパターンについて警告を出します。

+ +

+ +

条件式内での代入

+ +

if...else のような)条件式内で、ダン純名代入を行わないことをお勧めします。なぜならば、コードを一目見たときに、代入は等価と混同しやすいからです。たとえば、次のコードは使用しないでください:

+ +
if (x = y) {
+  // 正しいことを実行する。
+}
+
+ +

条件式内で代入をする必要がある場合、一般t京奈方法は代入の周りに追加の括弧を置くことです。たとえば:

+ +
if ((x = y)) {
+  // 正しいことを実行する。
+}
+ +

または、, 比較演算(たとえば、=====)を使用したいのかもしれません:

+ +
if (x == y) {
+  // 正しいことを実行する。
+}
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html b/files/ja/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html new file mode 100644 index 0000000000..47f846f064 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/for-each-in_loops_are_deprecated/index.html @@ -0,0 +1,168 @@ +--- +title: 'Warning: JavaScript 1.6''s for-each-in loops are deprecated' +slug: Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated +tags: + - JavaScript + - Warning +translation_of: Web/JavaScript/Reference/Errors/For-each-in_loops_are_deprecated +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
Warning: JavaScript 1.6's for-each-in loops are deprecated; consider using ES6 for-of instead
+
+ +

エラータイプ

+ +

警告

+ +

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

+ +

JavaScript 1.6 の {{jsxref("Statements/for_each...in", "for each (variable in obj)")}} ステートメントは非推奨で、近い将来削除される予定です。

+ +

+ +

オブジェクトの反復

+ +

特定のオブジェクトの値を反復するために、{{jsxref("Statements/for_each...in", "for each...in")}} が使用されています。

+ +

非推奨の構文

+ +
var object = { a: 10, b: 20 };
+
+for each (var x in object) {
+  console.log(x);        // 10
+                         // 20
+}
+
+ +

代わりの標準構文

+ +

指定したオブジェクトのキーを反復して、ループ内のそれぞれの値を取得するために、標準の {{jsxref("Statements/for...in", "for...in")}} ループを使用できます:

+ +
var object = { a: 10, b: 20 };
+
+for (var key in object) {
+  var x = object[key];
+  console.log(x);        // 10
+                         // 20
+}
+
+ +

または、{jsxref("Statements/for...of", "for...of")}}(ES2015)と {{jsxref("Object.values")}}(ES2017)を使用して、特定のオブジェクトの配列値を取得して、次のように反復処理できます:

+ +
var object = { a: 10, b: 20 };
+
+for (var x of Object.values(object)) {
+  console.log(x);        // 10
+                         // 20
+}
+
+ +

配列の反復

+ +

{{jsxref("Statements/for_each...in", "for each...in")}} は、特定の配列要素を反復するために使用されていました。

+ +

非推奨の構文

+ +
var array = [10, 20, 30];
+
+for each (var x in array) {
+  console.log(x);        // 10
+                         // 20
+                         // 30
+}
+
+ +

代わりの標準構文

+ +

{{jsxref("Statements/for...of", "for...of")}}(ES2015)で同様のループができます。

+ +
var array = [10, 20, 30];
+
+for (var x of array) {
+  console.log(x);        // 10
+                         // 20
+                         // 30
+}
+
+ +

null の可能性がある配列の反復

+ +

指定した値が nullundefined だった場合、 {{jsxref("Statements/for_each...in", "for each...in")}} は何もしませんが、{{jsxref("Statements/for...of", "for...of")}} は例外をスローします。

+ +

非推奨の構文

+ +
function func(array) {
+  for each (var x in array) {
+    console.log(x);
+  }
+}
+func([10, 20]);        // 10
+                       // 20
+func(null);            // prints nothing
+func(undefined);       // prints nothing
+
+ +

代わりの標準構文

+ +

{{jsxref("Statements/for_each...in", "for each...in")}} ステートメントを書き換えて、{{jsxref("Statements/for...of", "for...of")}} でも nullundefined を扱えるようにするには、{{jsxref("Statements/for...of", "for...of")}} の周囲をガードする必要があります。

+ +
function func(array) {
+  if (array) {
+    for (var x of array) {
+      console.log(x);
+    }
+  }
+}
+func([10, 20]);        // 10
+                       // 20
+func(null);            // prints nothing
+func(undefined);       // prints nothing
+
+ +

オブジェクトのキー/バリューペアを反復する

+ +

非推奨の構文

+ +

{{jsxref("Statements/for_each...in", "for each...in")}} と非推奨の {{jsxref("Iterator")}} オブジェクトを使用した、特定のオブジェクトのキー/バリューペアを反復する非推奨の語彙があります。

+ +
var object = { a: 10, b: 20 };
+
+for each (var [key, value] in Iterator(object)) {
+  console.log(key, value);  // "a", 10
+                            // "b", 20
+}
+
+ +

代わりの標準構文

+ +

指定したオブジェクトのキーを反復して、ループ内のそれぞれの値を取得するために、標準の {{jsxref("Statements/for...in", "for...in")}} ループを使用できます:

+ +
var object = { a: 10, b: 20 };
+
+for (var key in object) {
+  var value = object[key];
+  console.log(key, value);  // "a", 10
+                            // "b", 20
+}
+
+ +

または、{jsxref("Statements/for...of", "for...of")}}(ES2015)と {{jsxref("Object.values")}}(ES2017)を使用して、特定のオブジェクトの配列値を取得して、次のように反復処理できます:

+ +
var object = { a: 10, b: 20 };
+
+for (var [key, value] of Object.entries(object)) {
+  console.log(key, value);  // "a", 10
+                            // "b", 20
+}
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/getter_only/index.html b/files/ja/web/javascript/reference/errors/getter_only/index.html new file mode 100644 index 0000000000..831fb54785 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/getter_only/index.html @@ -0,0 +1,83 @@ +--- +title: 'TypeError: setting getter-only property "x"' +slug: Web/JavaScript/Reference/Errors/Getter_only +tags: + - Error + - Errors + - JavaScript + - Strict Mode + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Getter_only +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: setting getter-only property "x" (Firefox)
+TypeError: Cannot set property "prop" of #<Object> which has only a getter (Chrome)
+
+ +

エラータイプ

+ +

strict モードでのみ、{{jsxref("TypeError")}}。

+ +

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

+ +

getter しか指定されていないプロパティに、新しい値を設定しようとしています。非 strict モードでは暗黙裡に無視されるだけですが、strict モードでは {{jsxref("TypeError")}} がスローされます。

+ +

+ +

下記の例では、プロパティの getter の設定方法を示しています。setter は指定していないため、temperature プロパティに 30 をセットしようとすると、TypeError がスローされます。詳細は {{jsxref("Object.defineProperty()")}} ページを見てください。

+ +
"use strict";
+
+function Archiver() {
+  var temperature = null;
+  Object.defineProperty(this, 'temperature', {
+    get: function() {
+      console.log('get!');
+      return temperature;
+    }
+  });
+}
+
+var arc = new Archiver();
+arc.temperature; // 'get!'
+
+arc.temperature = 30;
+// TypeError: setting getter-only property "temperature"
+ +

このエラーを修正するには、temperature プロパティに値を設定しようとしている 16 行目を取り除くか、次のように setter を実装します:

+ +
"use strict";
+
+function Archiver() {
+  var temperature = null;
+  var archive = [];
+
+  Object.defineProperty(this, 'temperature', {
+    get: function() {
+      console.log('get!');
+      return temperature;
+    },
+    set: function(value) {
+      temperature = value;
+      archive.push({ val: temperature });
+    }
+  });
+
+  this.getArchive = function() { return archive; };
+}
+
+var arc = new Archiver();
+arc.temperature; // 'get!'
+arc.temperature = 11;
+arc.temperature = 13;
+arc.getArchive(); // [{ val: 11 }, { val: 13 }]
+ +

関連項目

+ + 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 new file mode 100644 index 0000000000..1903ac1fda --- /dev/null +++ b/files/ja/web/javascript/reference/errors/identifier_after_number/index.html @@ -0,0 +1,53 @@ +--- +title: 'SyntaxError: identifier starts immediately after numeric literal' +slug: Web/JavaScript/Reference/Errors/Identifier_after_number +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Identifier_after_number +--- +
{{JSSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: identifier starts immediately after numeric literal (Firefox)
+SyntaxError: Unexpected number (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}

+ +

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

+ +

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

+ +

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

+ +

+ +

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

+ +

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

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

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

+ +
var life1 = 'foo';
+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 new file mode 100644 index 0000000000..7f3ed44b20 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/illegal_character/index.html @@ -0,0 +1,75 @@ +--- +title: 'SyntaxError: illegal character' +slug: Web/JavaScript/Reference/Errors/Illegal_character +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Illegal_character +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: illegal character (Firefox)
+SyntaxError: Invalid or unexpected token (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}

+ +

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

+ +

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

+ +

+ +

文字のミスマッチ

+ +

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

+ +
“This looks like a string”;
+// SyntaxError: illegal character
+
+42 – 13;
+// SyntaxError: illegal character
+
+ +

これは動作します:

+ +
"This is actually a string";
+
+42 - 13;
+
+ +

文字の付け忘れ

+ +

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

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

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

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

隠れた文字

+ +

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

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

Vim のようなエディターでこのコードを調査すると、実際には zero-width space (ZWSP) (U+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 new file mode 100644 index 0000000000..3bf515574d --- /dev/null +++ b/files/ja/web/javascript/reference/errors/in_operator_no_object/index.html @@ -0,0 +1,75 @@ +--- +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 +translation_of: Web/JavaScript/Reference/Errors/in_operator_no_object +--- +
{{jsSidebar("Errors")}}
+ +

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

+ +

メッセージ

+ +
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";
+// 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;
+// true
+ +

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

+ +

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

+ +
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)
+
+ +

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

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

配列の中の検索

+ +

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

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

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/index.html b/files/ja/web/javascript/reference/errors/index.html new file mode 100644 index 0000000000..c37da5df66 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/index.html @@ -0,0 +1,25 @@ +--- +title: JavaScript エラーリファレンス +slug: Web/JavaScript/Reference/Errors +tags: + - Debugging + - Error + - Errors + - Exception + - JavaScript + - exceptions +translation_of: Web/JavaScript/Reference/Errors +--- +

{{jsSidebar("Errors")}}

+ +

以下に、 JavaScript で発生するエラーのリストがあります。これらのエラーはデバッグを大いに助けてくれますが、報告される問題がいつも直ちに明快とは限りません。以下のページでは、これらのエラーについて詳しく説明します。どのエラーも {{jsxref("Error")}} オブジェクトを基礎としたオブジェクトであり、namemessage を有しています。

+ +

ウェブコンソールに表示されたエラーには、コードにある問題を速やかに理解するのに役立つ、関連ページへのリンクが含まれていることがあります。

+ +

JavaScript のエラーを修正するための初心者向け導入用チュートリアルについては、何が間違っている? JavaScript のトラブルシューティングを参照してください。

+ +

エラーのリスト

+ +

このリストでは、各ページが名前 (エラーの種別) とメッセージ (より詳細で読解可能なエラーメッセージ) によってリストアップされています。これら 2 つのプロパティが、エラーの理解と解決の出発点となります。詳細は、以下のリンクを参照してください!

+ +

{{ListSubPages("/ja/docs/Web/JavaScript/Reference/Errors")}}

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 new file mode 100644 index 0000000000..8cad04b6be --- /dev/null +++ b/files/ja/web/javascript/reference/errors/invalid_array_length/index.html @@ -0,0 +1,77 @@ +--- +title: 'RangeError: invalid array length' +slug: Web/JavaScript/Reference/Errors/Invalid_array_length +tags: + - Errors + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Invalid_array_length +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

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

エラータイプ

+ +

{{jsxref("RangeError")}}

+ +

何が悪かったの?

+ +

以下のいずれかです:

+ + + +

なぜ 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)
+
+ +

関連項目

+ + 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 new file mode 100644 index 0000000000..b671a41d1b --- /dev/null +++ b/files/ja/web/javascript/reference/errors/invalid_assignment_left-hand_side/index.html @@ -0,0 +1,54 @@ +--- +title: 'ReferenceError: invalid assignment left-hand side' +slug: Web/JavaScript/Reference/Errors/Invalid_assignment_left-hand_side +tags: + - Errors + - JavaScript + - ReferenceError +translation_of: Web/JavaScript/Reference/Errors/Invalid_assignment_left-hand_side +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
ReferenceError: invalid assignment left-hand side
+
+ +

エラータイプ

+ +

{{jsxref("ReferenceError")}}。

+ +

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

+ +

どこかに予想外の割り当てがあります。たとえば、代入演算子比較演算子 にミスマッチがあるせいかもしれません。"=" 記号が 1 つの場合は変数に値を割り当てる一方、"==" か "===" 演算子は値を比較します。

+ +

+ +
if (Math.PI = 3 || Math.PI = 4) {
+  console.log('no way!');
+}
+// ReferenceError: invalid assignment left-hand side
+
+var str = 'Hello, '
++= 'is it me '
++= 'you\'re looking for?';
+// ReferenceError: invalid assignment left-hand side
+
+ +

if ステートメントでは、比較演算子("==")が必要ですし、文字連結にはプラス("+")演算子が必要です。

+ +
if (Math.PI == 3 || Math.PI == 4) {
+  console.log('no way!');
+}
+
+var str = 'Hello, '
++ 'from the '
++ 'other side!';
+
+ +

関連項目

+ + 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 new file mode 100644 index 0000000000..e446935a23 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/invalid_const_assignment/index.html @@ -0,0 +1,91 @@ +--- +title: 'TypeError: invalid assignment to const "x"' +slug: Web/JavaScript/Reference/Errors/Invalid_const_assignment +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Invalid_const_assignment +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

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

エラータイプ

+ +

{{jsxref("TypeError")}}

+ +

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

+ +

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

+ +

+ +

無効な再宣言

+ +

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

+ +
const COLUMNS = 80;
+
+// ...
+
+COLUMNS = 120; // TypeError: invalid assignment to const `COLUMNS'
+ +

エラーを修正

+ +

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

+ +

リネーム

+ +

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

+ +
const COLUMNS = 80;
+const WIDE_COLUMNS = 120;
+ +

constletvar?

+ +

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

+ +
let columns = 80;
+
+// ...
+
+let columns = 120;
+
+ +

スコープ

+ +

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

+ +
const COLUMNS = 80;
+
+function setupBigScreenEnvironment() {
+  const COLUMNS = 120;
+}
+ +

const と不変性

+ +

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

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

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

+ +
obj.foo = 'baz';
+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 new file mode 100644 index 0000000000..eda2efa96f --- /dev/null +++ b/files/ja/web/javascript/reference/errors/invalid_date/index.html @@ -0,0 +1,54 @@ +--- +title: 'RangeError: invalid date' +slug: Web/JavaScript/Reference/Errors/Invalid_date +tags: + - Errors + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Invalid_date +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
RangeError: invalid date (Firefox)
+RangeError: invalid time value (Chrome)
+RangeError: Provided date is not in valid range (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("RangeError")}}

+ +

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

+ +

{{jsxref("Date")}} か {{jsxref("Date.parse()")}} に無効な日付につながる文字列が渡されました。

+ +

+ +

無効なケース

+ +

ISO フォーマットの文字列に不正な要素の値を含む認識できない文字列や日付は、通常 {{jsxref("NaN")}} を返します。しかし、Firefox における次のケースのように、実装によっては不適合な ISO フォーマットの文字列は RangeError: invalid date をスローします:

+ +
new Date('foo-bar 2014');
+new Date('2014-25-23').toISOString();
+new Date('foo-bar 2014').toString();
+
+ +

一方、これは Firefox で {{jsxref("NaN")}} を返します:

+ +
Date.parse('foo-bar 2014'); // NaN
+ +

詳細は {{jsxref("Date.parse()")}} ドキュメントをご覧ください。

+ +

有効なケース

+ +
new Date('05 October 2011 14:48 UTC');
+ +

関連項目

+ + 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 new file mode 100644 index 0000000000..bb8948a49e --- /dev/null +++ b/files/ja/web/javascript/reference/errors/invalid_for-in_initializer/index.html @@ -0,0 +1,75 @@ +--- +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 +translation_of: Web/JavaScript/Reference/Errors/Invalid_for-in_initializer +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: for-in loop head declarations may not have initializers (Firefox)
+
+SyntaxError: for-in loop variable declaration may not have an initializer. (Chrome)
+
+ +

エラータイプ

+ +

strict モードでのみ、{{jsxref("SyntaxError")}}。

+ +

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

+ +

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

+ +

+ +

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

+ +
"use strict";
+
+var obj = {a: 1, b: 2, c: 3 };
+
+for (var i = 0 in obj) {
+  console.log(obj[i]);
+}
+
+// SyntaxError: for-in loop head declarations may not have initializers
+
+ +

有効な for-in ループ

+ +

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

+ +
"use strict";
+
+var obj = {a: 1, b: 2, c: 3 };
+
+for (var i in obj) {
+  console.log(obj[i]);
+}
+
+ +

Array イテレーション

+ +

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

+ +
var arr = [ "a", "b", "c" ]
+
+for (var i = 2; i < arr.length; i++) {
+  console.log(arr[i]);
+}
+
+// "c"
+ +

関連項目

+ + 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 new file mode 100644 index 0000000000..99792a7afe --- /dev/null +++ b/files/ja/web/javascript/reference/errors/invalid_for-of_initializer/index.html @@ -0,0 +1,64 @@ +--- +title: >- + SyntaxError: a declaration in the head of a for-of loop can't have an + initializer +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")}}
+ +

メッセージ

+ +
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)
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}

+ +

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

+ +

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

+ +

+ +

不正な for-of ループ

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

有効な for-of ループ

+ +

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

+ +
let iterable = [10, 20, 30];
+
+for (let value of iterable) {
+  value += 50;
+  console.log(value);
+}
+// 60
+// 70
+// 80
+
+ +

関連項目

+ + 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 new file mode 100644 index 0000000000..5279e67cfa --- /dev/null +++ b/files/ja/web/javascript/reference/errors/invalid_right_hand_side_instanceof_operand/index.html @@ -0,0 +1,62 @@ +--- +title: 'TypeError: invalid ''instanceof'' operand ''x''' +slug: Web/JavaScript/Reference/Errors/invalid_right_hand_side_instanceof_operand +tags: + - Error + - Errors + - JavaScript + - Reference + - TypeError +translation_of: Web/JavaScript/Reference/Errors/invalid_right_hand_side_instanceof_operand +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
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)
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}

+ +

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

+ +

instanceof 演算子 は、右側のオペランドがコンストラクターオブジェクトであることを想定しています。つまり、右側のオペランドは prototype プロパティを持ち、呼び出し可能であるオブジェクトである必要があります。

+ +

+ +
"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 x = new Foo();
+
+x instanceof f;       // TypeError: invalid 'instanceof' operand f
+x instanceof x;       // TypeError: x is not a function
+
+ +

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

+ +
typeof "test" == "string"; // true
+typeof 42 == "number"      // true
+
+function Foo() {}
+var f = Foo;               // Do not call Foo.
+var x = new Foo();
+
+x instanceof f;            // true
+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 new file mode 100644 index 0000000000..6da6ca9b19 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/is_not_iterable/index.html @@ -0,0 +1,105 @@ +--- +title: 'TypeError: ''x'' is not iterable' +slug: Web/JavaScript/Reference/Errors/is_not_iterable +tags: + - Error + - JavaScript + - Reference + - TypeError +translation_of: Web/JavaScript/Reference/Errors/is_not_iterable +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: 'x' is not iterable (Firefox, Chrome)
+TypeError: 'x' is not a function or its return value is not iterable (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}

+ +

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

+ +

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

+ +

+ +

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

+ +

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

+ +
var obj = { 'France': 'Paris', 'England': 'London' };
+for (let p of obj) { // TypeError: obj is not iterable
+    // …
+}
+
+ +

代わりに、オブジェクトのプロパティを反復処理するためには {{jsxref("Object.keys")}} か {{jsxref("Object.entries")}} を使用してください。

+ +
var obj = { 'France': 'Paris', 'England': 'London' };
+// Iterate over the property names:
+for (let country of Object.keys(obj)) {
+    var capital = obj[country];
+    console.log(country, capital);
+}
+
+for (const [country, capital] of Object.entries(obj))
+    console.log(country, capital);
+
+
+
+ +

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

+ +
var map = new Map;
+map.set('France', 'Paris');
+map.set('England', 'London');
+// Iterate over the property names:
+for (let country of map.keys()) {
+    let capital = map[country];
+    console.log(country, capital);
+}
+
+for (let capital of map.values())
+    console.log(capital);
+
+for (const [country, capital] of map.entries())
+    console.log(country, capital);
+
+ +

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

+ +

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

+ +
function* generate(a, b) {
+  yield a;
+  yield b;
+}
+
+for (let x of generate) // TypeError: generate is not iterable
+    console.log(x);
+
+ +

ジェネレーターを呼び出していないとき、ジェネレーターに対応した {{jsxref("Function")}} オブジェクトは呼び出し可能ですが、反復処理はできません。ジェネレーターを呼び出すと、ジェネレーターの実行中に生成された値を反復処理する反復可能オブジェクトが生成されます。

+ +
function* generate(a, b) {
+    yield a;
+    yield b;
+}
+
+for (let x of generate(1,2))
+    console.log(x);
+
+ +

関連項目

+ + 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 new file mode 100644 index 0000000000..1f1af72e0e --- /dev/null +++ b/files/ja/web/javascript/reference/errors/json_bad_parse/index.html @@ -0,0 +1,113 @@ +--- +title: 'SyntaxError: JSON.parse: bad parsing' +slug: Web/JavaScript/Reference/Errors/JSON_bad_parse +tags: + - 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: bad control character in string literal
+SyntaxError: JSON.parse: bad character in string literal
+SyntaxError: JSON.parse: bad Unicode escape
+SyntaxError: JSON.parse: bad escape character
+SyntaxError: JSON.parse: unterminated string
+SyntaxError: JSON.parse: no number after minus sign
+SyntaxError: JSON.parse: unexpected non-digit
+SyntaxError: JSON.parse: missing digits after decimal point
+SyntaxError: JSON.parse: unterminated fractional number
+SyntaxError: JSON.parse: missing digits after exponent indicator
+SyntaxError: JSON.parse: missing digits after exponent sign
+SyntaxError: JSON.parse: exponent part is missing a number
+SyntaxError: JSON.parse: unexpected end of data
+SyntaxError: JSON.parse: unexpected keyword
+SyntaxError: JSON.parse: unexpected character
+SyntaxError: JSON.parse: end of data while reading object contents
+SyntaxError: JSON.parse: expected property name or '}'
+SyntaxError: JSON.parse: end of data when ',' or ']' was expected
+SyntaxError: JSON.parse: expected ',' or ']' after array element
+SyntaxError: JSON.parse: end of data when property name was expected
+SyntaxError: JSON.parse: expected double-quoted property name
+SyntaxError: JSON.parse: end of data after property name when ':' was expected
+SyntaxError: JSON.parse: expected ':' after property name in object
+SyntaxError: JSON.parse: end of data after property value in object
+SyntaxError: JSON.parse: expected ',' or '}' after property value in object
+SyntaxError: JSON.parse: expected ',' or '}' after property-value pair in object literal
+SyntaxError: JSON.parse: property names must be double-quoted strings
+SyntaxError: JSON.parse: expected property name or '}'
+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() は末尾のカンマを許容しない

+ +

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

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

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

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

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

+ +

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

+ +
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}');
+ +

先頭のゼロと小数点

+ +

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

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

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

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

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/malformed_formal_parameter/index.html b/files/ja/web/javascript/reference/errors/malformed_formal_parameter/index.html new file mode 100644 index 0000000000..0eeb46bcab --- /dev/null +++ b/files/ja/web/javascript/reference/errors/malformed_formal_parameter/index.html @@ -0,0 +1,65 @@ +--- +title: 'SyntaxError: Malformed formal parameter' +slug: Web/JavaScript/Reference/Errors/Malformed_formal_parameter +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Malformed_formal_parameter +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の例外 "malformed formal parameter" は、 Function() 呼び出しの引数リストが何らか無効である場合に発生します。

+ +

メッセージ

+ +
SyntaxError: Expected {x} (Edge)
+SyntaxError: malformed formal parameter (Firefox)
+
+ +

エラー種別

+ +

{{jsxref("SyntaxError")}}

+ +

原因

+ +

Function() を使用しいて、最低 2 つの引数を渡すとします。最後の引数は、作成する新しい関数のソースコードです。 残りの引数は、新しく生成する関数の引数リストを構成します。

+ +

引数リストの何らかが無効です。引数名として ifvar のようなキーワードを選んでしまったかもしれませんし、引数リストに誤った区切りがあるかもしれません。または、数値やオブジェクトのような無効な値を渡しているかもしれません。

+ +

問題は解決した。しかし、なぜ最初にそれを伝えないのか?

+ +

確かに、エラーメッセージの文言は少々奇妙です。 "Formal parameter" は、 "関数の引数" を表現するにはファンシーな言い方です。 さらに、"malformed" という言葉を使っていますが、それは Firefox エンジニアが 19 世紀のゴッシックホラー小説の大ファンだからです。

+ +

+ +

無効な場合

+ +
var f = Function('x y', 'return x + y;');
+// SyntaxError (missing a comma)
+
+var f = Function('x,', 'return x;');
+// SyntaxError (extraneous comma)
+
+var f = Function(37, "alert('OK')");
+// SyntaxError (numbers can't be argument names)
+
+ +

妥当な場合

+ +
var f = Function('x, y', 'return x + y;');  // correctly punctuated
+
+var f = Function('x', 'return x;');
+
+// if you can, avoid using Function - this is much faster
+var f = function(x) { return x; };
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/malformed_uri/index.html b/files/ja/web/javascript/reference/errors/malformed_uri/index.html new file mode 100644 index 0000000000..0cb5f16458 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/malformed_uri/index.html @@ -0,0 +1,64 @@ +--- +title: 'URIError: malformed URI sequence' +slug: Web/JavaScript/Reference/Errors/Malformed_URI +tags: + - Error + - Errors + - JavaScript + - URIError +translation_of: Web/JavaScript/Reference/Errors/Malformed_URI +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
URIError: malformed URI sequence (Firefox)
+URIError: URI malformed (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("URIError")}}

+ +

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

+ +

URI エンコードかデコードが成功しませんでした。{{jsxref("decodeURI")}} か {{jsxref("encodeURI")}}、{{jsxref("encodeURIComponent")}}、{{jsxref("decodeURIComponent")}} 関数の引数が無効のため、関数は適切にエンコード、またはデコードできませんでした。

+ +

+ +

エンコーディング

+ +

エンコーディングは、特定の文字インスタンスをそれぞれ、文字の UFT-8 エンコーディングを表す 1 つか 2 つ、3 つ 4 つのシーケンスに置き換えます。高低ペアの一部ではないサロゲートをエンコードしようとした場合、{{jsxref("URIError")}} がスローされます。たとえば:

+ +
encodeURI('\uD800');
+// "URIError: malformed URI sequence"
+
+encodeURI('\uDFFF');
+// "URIError: malformed URI sequence"
+
+ +

高低ペアは ok です。たとえば:

+ +
encodeURI('\uD800\uDFFF');
+// "%F0%90%8F%BF"
+ +

デコーディング

+ +
decodeURIComponent('%E0%A4%A');
+// "URIError: malformed URI sequence"
+
+ +

適切な入力を行うと、通常は次のようになります:

+ +
decodeURIComponent('JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B');
+// "JavaScript_шеллы"
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_bracket_after_list/index.html b/files/ja/web/javascript/reference/errors/missing_bracket_after_list/index.html new file mode 100644 index 0000000000..02abb823c0 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_bracket_after_list/index.html @@ -0,0 +1,56 @@ +--- +title: 'SyntaxError: missing ] after element list' +slug: Web/JavaScript/Reference/Errors/Missing_bracket_after_list +tags: + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_bracket_after_list +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: missing ] after element list
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}。

+ +

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

+ +

どこかで配列初期化構文のエラーがあります。閉じ括弧("]")かカンマ(",")が不足している可能性があります。

+ +

+ +

不完全な配列初期化

+ +
var list = [1, 2,
+
+var instruments = [
+  "Ukulele",
+  "Guitar",
+  "Piano"
+};
+
+var data = [{foo: "bar"} {bar: "foo"}];
+
+ +

次のように修正できます:

+ +
var list = [1, 2];
+
+var instruments = [
+ "Ukulele",
+ "Guitar",
+ "Piano"
+];
+
+var data = [{foo: "bar"}, {bar: "foo"}];
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_colon_after_property_id/index.html b/files/ja/web/javascript/reference/errors/missing_colon_after_property_id/index.html new file mode 100644 index 0000000000..06addb29f4 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_colon_after_property_id/index.html @@ -0,0 +1,77 @@ +--- +title: 'SyntaxError: missing : after property id' +slug: Web/JavaScript/Reference/Errors/Missing_colon_after_property_id +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_colon_after_property_id +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: missing : after property id
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}

+ +

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

+ +

オブジェクト初期化子構文でオブジェクトを生成する場合、オブジェクトのプロパティのキーと値をコロン (:) で区切ります。

+ +
var obj = { propertyKey: 'value' };
+
+ +

+ +

コロン vs. 代入記号

+ +

この方法で代入記号をオブジェクト初期化子構文として使用できないため、このコードは失敗します。

+ +
var obj = { propertyKey = 'value' };
+// SyntaxError: missing : after property id
+
+ +

正しくはコロンを使用するか、オブジェクトを生成した後に角括弧を使用して新しいプロパティを割り当てます。

+ +
var obj = { propertyKey: 'value' };
+
+// または
+
+var obj = { };
+obj['propertyKey'] = 'value';
+
+ +

空のプロパティ

+ +

このような方法で空のプロパティを生成できません:

+ +
var obj = { propertyKey; };
+// SyntaxError: missing : after property id
+
+ +

値がないプロパティを定義する必要がある場合、値として {{jsxref("null")}} を使用します。

+ +
var obj = { propertyKey: null };
+ +

計算されたプロパティ

+ +

式からプロパティキーを生成する場合、角括弧を使用します。そうしなければ、プロパティ名は計算できません:

+ +
var obj = { 'b'+'ar': 'foo' };
+// SyntaxError: missing : after property id
+
+ +

式を括弧 [] に入れます:

+ +
var obj = { ['b'+'ar']: 'foo' };
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_curly_after_function_body/index.html b/files/ja/web/javascript/reference/errors/missing_curly_after_function_body/index.html new file mode 100644 index 0000000000..a6cad1865d --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_curly_after_function_body/index.html @@ -0,0 +1,67 @@ +--- +title: 'SyntaxError: missing } after function body' +slug: Web/JavaScript/Reference/Errors/Missing_curly_after_function_body +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_curly_after_function_body +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: missing } after function body
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}

+ +

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

+ +

どこかで関数を生成するときに、構文上のミスをしています。また、括弧や中括弧の閉じが正しい順番かどうかを確認してください。コードをフォーマットしたり、インデントしたりすると、ジャングルを探すのに役立つと思います。

+ +

+ +

閉じ括弧忘れ

+ +

しばしば、関数コードで閉じ括弧を忘れることがあります:

+ +
var charge = function() {
+  if (sunny) {
+    useSolarCells();
+  } else {
+    promptBikeRide();
+};
+
+ +

正しくは:

+ +
var charge = function() {
+  if (sunny) {
+    useSolarCells();
+  } else {
+    promptBikeRide();
+  }
+};
+ +

たとえば、{{Glossary("IIFE")}} やクロージャ、そのほかのたくさんの中括弧や括弧を使用する構造体を使用しているときは、さらに分かりにくくなります。

+ +
(function() { if (true) { return false; } );
+
+ +

多くの場合、異なるようにインデントするか、インデントをダブルチェックすると、これらのエラーを特定するのに役立ちます。

+ +
(function() {
+  if (true) {
+    return false;
+  }
+});
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_curly_after_property_list/index.html b/files/ja/web/javascript/reference/errors/missing_curly_after_property_list/index.html new file mode 100644 index 0000000000..d77ef07a5b --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_curly_after_property_list/index.html @@ -0,0 +1,51 @@ +--- +title: 'SyntaxError: missing } after property list' +slug: Web/JavaScript/Reference/Errors/Missing_curly_after_property_list +tags: + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_curly_after_property_list +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: missing } after property list
+
+ +

Error type

+ +

{{jsxref("SyntaxError")}}

+ +

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

+ +

どこかに object initializer 構文の誤りがあります。実際に波括弧を忘れているかもしれませんが、セミコロンが不足ている可能性もあります。また、閉じ波括弧や括弧が正しい順序になっているかも確認してください。コードをインデントやフォーマットすると、多少見通しが良くなります。

+ +

+ +

カンマ忘れ

+ +

多くの場合、object initializer コードにカンマ忘れがあります:

+ +
var obj = {
+  a: 1,
+  b: { myProp: 2 }
+  c: 3
+};
+
+ +

次のように修正できます:

+ +
var obj = {
+  a: 1,
+  b: { myProp: 2 },
+  c: 3
+};
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_formal_parameter/index.html b/files/ja/web/javascript/reference/errors/missing_formal_parameter/index.html new file mode 100644 index 0000000000..438e357de8 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_formal_parameter/index.html @@ -0,0 +1,80 @@ +--- +title: 'SyntaxError: missing formal parameter' +slug: Web/JavaScript/Reference/Errors/Missing_formal_parameter +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_formal_parameter +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: missing formal parameter (Firefox)
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}

+ +

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

+ +

"Formal parameter" とは、 "関数の引数" のことです。関数宣言で、有効な引数を忘れています。関数定義において、引数は {{Glossary("Identifier", "identifiers")}} でなければならず、数字や文字列、オブジェクトのような値であってはいけません。関数の宣言と関数の呼び出しは、異なる 2 つのステップです。宣言時には引数として識別子が求められ、関数を呼び出すときだけ、関数が使用する値を提供します。

+ +

{{glossary("JavaScript")}} では、識別子はアルファベット文字 (または "$" か "_") だけを含めることができ、数値から始められません。文字列はデータですが、識別子はコードの一部です。そのため、識別子と文字列は異なるものです。

+ +

+ +

関数を定義するとき、関数の引数は識別子でなければなりません。引数として値を提供しているため、これらの関数宣言はすべて失敗します:

+ +
function square(3) {
+  return number * number;
+};
+// SyntaxError: missing formal parameter
+
+function greet("Howdy") {
+  return greeting;
+};
+// SyntaxError: missing formal parameter
+
+function log({ obj: "value"}) {
+  console.log(arg)
+};
+// SyntaxError: missing formal parameter
+
+ +

関数宣言では、識別子を使用しなければなりません:

+ +
function square(number) {
+  return number * number;
+};
+
+function greet(greeting) {
+  return greeting;
+};
+
+function log(arg) {
+  console.log(arg)
+};
+ +

次に、好きな引数を渡してこれらの関数を呼び出せます:

+ +
square(2); // 4
+
+greet("Howdy"); // "Howdy"
+
+log({obj: "value"}); // Object { obj: "value" }
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_initializer_in_const/index.html b/files/ja/web/javascript/reference/errors/missing_initializer_in_const/index.html new file mode 100644 index 0000000000..ca302d074a --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_initializer_in_const/index.html @@ -0,0 +1,59 @@ +--- +title: 'SyntaxError: missing = in const declaration' +slug: Web/JavaScript/Reference/Errors/Missing_initializer_in_const +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_initializer_in_const +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: missing = in const declaration (Firefox)
+SyntaxError: Missing initializer in const declaration (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}

+ +

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

+ +

定数は、通常の実行中にプログラムによって変更できない値です。これは、再代入で変更できず、再宣言もできません。JavaScript では、定数は const キーワードで宣言します。定数の初期化子が必要です。つまり、宣言と同じステートメントで値を指定する必要があります (後で変更できないため、これには意味があります)。

+ +

Examples

+ +

定数初期化子忘れ

+ +

varlet と異なり、const 宣言では値を指定する必要があります。これはエラーをスローします:

+ +
const COLUMNS;
+// SyntaxError: missing = in const declaration
+ +

エラーを修正する

+ +

このエラーを修正するには、複数の方法があります。定数で何をしようとしていたかを確認してください。

+ +

定数値を追加する

+ +

宣言と同じステートメントで定数の値を指定します:

+ +
const COLUMNS = 80;
+ +

constletvar?

+ +

定数を宣言したいわけではない場合、const を使用しないでください。ブロックスコープの変数を let で宣言したいか、グローバル変数を var で宣言したいのかもしれません。双方ともに、初期値を必要としません。

+ +
let columns;
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_name_after_dot_operator/index.html b/files/ja/web/javascript/reference/errors/missing_name_after_dot_operator/index.html new file mode 100644 index 0000000000..7ae10e46e7 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_name_after_dot_operator/index.html @@ -0,0 +1,68 @@ +--- +title: 'SyntaxError: missing name after . operator' +slug: Web/JavaScript/Reference/Errors/Missing_name_after_dot_operator +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_name_after_dot_operator +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: missing name after . operator
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}

+ +

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

+ +

メンバー演算子に対して、ドット演算子が (.) 使われました。アクセスしたいプロパティ名を指定しなければなりません。計算されたプロパティアクセスのためには、プロパティアクセスをドットを使用したものから角括弧を使用したものに変更する必要があります。それにより、式を計算できるようになります。そうではなく、連結しようとしましたか? その場合は、プラス演算子 (+) を代わりに使用してください。以下の例をご覧ください。

+ +

+ +

プロパティアクセス

+ +

JavaScript のメンバー演算子は、ドット (.) か角括弧 ([]) を使用しますが、両方は使いません。角括弧で計算されたプロパティアクセスができます。

+ +
var obj = { foo: { bar: "baz", bar2: "baz2" } };
+var i = 2;
+
+obj.[foo].[bar]
+// SyntaxError: missing name after . operator
+
+obj.foo."bar"+i;
+// SyntaxError: missing name after . operator
+
+ +

このコードを修正するには、このようにオブジェクトにアクセスする必要があります:

+ +
obj.foo.bar; // "baz"
+// or alternatively
+obj["foo"]["bar"]; // "baz"
+
+// computed properties require square brackets
+obj.foo["bar" + i]; // "baz2"
+
+ +

プロパティアクセス vs. 連結

+ +

({{Glossary("PHP")}} のような) ほかの言語から来たなら、ドット演算子 (.) と連結演算子 (+) を混同しがちです。

+ +
console.log("Hello" . "world");
+
+// SyntaxError: missing name after . operator
+ +

連結のためにはプラス記号を使用すべきです:

+ +
console.log("Hello" + "World");
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html b/files/ja/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html new file mode 100644 index 0000000000..fd647ac2ad --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_parenthesis_after_argument_list/index.html @@ -0,0 +1,42 @@ +--- +title: 'SyntaxError: missing ) after argument list' +slug: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list +tags: + - Errors + - JavaScript + - SynataxError +translation_of: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_argument_list +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: missing ) after argument list
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}。

+ +

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

+ +

関数の呼び出し方にエラーがあります。たとえば、タイポや演算子の記述忘れ、文字列のエスケープミスの可能性が考えられます。

+ +

+ +

文字列を連結する "+" 演算子がないため、JavaScript は log 関数の引数として、"PI: " だけを想定します。この場合、閉じ括弧で終了する必要があります。

+ +
console.log('PI: ' Math.PI);
+// SyntaxError: missing ) after argument list
+
+ +

"+" 演算子を追加することで、log の呼び出しを修正できます:

+ +
console.log('PI: ' + Math.PI);
+// "PI: 3.141592653589793"
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html b/files/ja/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html new file mode 100644 index 0000000000..2a8e8cc1d6 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_parenthesis_after_condition/index.html @@ -0,0 +1,70 @@ +--- +title: 'SyntaxError: missing ) after condition' +slug: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_condition +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_parenthesis_after_condition +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: missing ) after condition
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}

+ +

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

+ +

if 条件の書き方にエラーがあります。いくつかのプログラミング言語では、コードは異なる入力に応じて意思決定とアクションを実行する必要があります。if ステートメントは指定した条件を満たす場合、処理を実行します。JavaScript では、この条件は if キーワードの後に括弧を付ける必要があります。次ように:

+ +
if (condition) {
+  // do something if the condition is true
+}
+ +

+ +

ちょっとした見落としかもしれないので、慎重にコード内のすべての括弧をチェックしてください。

+ +
if (3 > Math.PI {
+  console.log("wait what?");
+}
+
+// SyntaxError: missing ) after condition
+
+ +

このコードを修正するには、条件を閉じる括弧を追加する必要があります。

+ +
if (3 > Math.PI) {
+  console.log("wait what?");
+}
+ +

あなたがほかの言語から来たなら、JavaScript で同じ意味を持たないキーワードや意味のないキーワードを追加してしまいがちです。

+ +
if (done is true) {
+ console.log("we are done!");
+}
+
+// SyntaxError: missing ) after condition
+
+ +

代わりに、正しい比較演算子を使うべきです。たとえば:

+ +
if (done === true) {
+ console.log("we are done!");
+}
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/missing_semicolon_before_statement/index.html b/files/ja/web/javascript/reference/errors/missing_semicolon_before_statement/index.html new file mode 100644 index 0000000000..05b3d6c9d6 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/missing_semicolon_before_statement/index.html @@ -0,0 +1,67 @@ +--- +title: 'SyntaxError: missing ; before statement' +slug: Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement +tags: + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Missing_semicolon_before_statement +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: missing ; before statement
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}.

+ +

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

+ +

どこかでセミコロン(;)を忘れています。JavaScript 文はセミコロンで終えなければなりません。これらのいくつかは、自動セミコロン挿入(ASI)の影響を受けますが、この場合JavaScript がソースコードを正確に解析するためには、セミコロンを提供する必要があります。

+ +

しかし、多くの場合、このエラーは、文字列の不適切なエスケープや var の誤った使用などのその他のエラーの結果として発生します。また、どこかで括弧が多すぎるかもしれません。このエラーがスローされた場合、注意深く構文をチェックしなければなりません。

+ +

+ +

エスケープしていない文字列

+ +

このエラーは、適切に文字列をエスケープしておらず、JavaScript エンジンが文字列がすでに終了していると予測するときにしばしば発生します。たとえば:

+ +
var foo = 'Tom's bar';
+// SyntaxError: missing ; before statement
+ +

ダブルクオートを使用するか、アポストロフィをエスケープします:

+ +
var foo = "Tom's bar";
+var foo = 'Tom\'s bar';
+
+ +

var を使用したプロパティ宣言

+ +

オブジェクトや配列のプロパティを、var を使って宣言することはできません

+ +
var obj = {};
+var obj.foo = 'hi'; // SyntaxError missing ; before statement
+
+var array = [];
+var array[0] = 'there'; // SyntaxError missing ; before statement
+
+ +

替わりに、var キーワードを省略します:

+ +
var obj = {};
+obj.foo = 'hi';
+
+var array = [];
+array[0] = 'there';
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/more_arguments_needed/index.html b/files/ja/web/javascript/reference/errors/more_arguments_needed/index.html new file mode 100644 index 0000000000..2a99e60894 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/more_arguments_needed/index.html @@ -0,0 +1,48 @@ +--- +title: 'TypeError: More arguments needed' +slug: Web/JavaScript/Reference/Errors/More_arguments_needed +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/More_arguments_needed +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: Object.create requires more than 0 arguments
+TypeError: Object.setPrototypeOf requires more than 1 argument
+TypeError: Object.defineProperties requires more than 0 arguments
+
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}。

+ +

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

+ +

関数の呼び出し方にエラーがあります。より多くの引数を提供する必要があります。

+ +

+ +

{{jsxref("Object.create()")}} メソッドは、少なくとも 1 つは引数が必要です。また、{{jsxref("Object.setPrototypeOf()")}} メソッドは少なくとも 2 つ引数が必要です:

+ +
var obj = Object.create();
+// TypeError: Object.create requires more than 0 arguments
+
+var obj = Object.setPrototypeOf({});
+// TypeError: Object.setPrototypeOf requires more than 1 argument
+
+ +

たとえば、{{jsxref("null")}} を prototype として設定することで修正できます:

+ +
var obj = Object.create(null);
+
+var obj = Object.setPrototypeOf({}, null);
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/negative_repetition_count/index.html b/files/ja/web/javascript/reference/errors/negative_repetition_count/index.html new file mode 100644 index 0000000000..0ffa96b1bd --- /dev/null +++ b/files/ja/web/javascript/reference/errors/negative_repetition_count/index.html @@ -0,0 +1,44 @@ +--- +title: 'RangeError: repeat count must be non-negative' +slug: Web/JavaScript/Reference/Errors/Negative_repetition_count +tags: + - Errors + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Negative_repetition_count +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
RangeError: repeat count must be non-negative (Firefox)
+RangeError: Invalid count value (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("RangeError")}}

+ +

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

+ +

{{jsxref("String.prototype.repeat()")}} メソッドを使用しています。count パラメーターは、文字列の繰り返し回数を指定します。 これは 0 から正の {{jsxref("Infinity")}} 以下の値である必要があり、負数は使用できません。 有効値の範囲はこのように表現できます: [0, +∞)。

+ +

+ +

無効なケース

+ +
'abc'.repeat(-1); // RangeError 
+ +

有効なケース

+ +
'abc'.repeat(0);    // ''
+'abc'.repeat(1);    // 'abc'
+'abc'.repeat(2);    // 'abcabc'
+'abc'.repeat(3.5);  // 'abcabcabc' (count は整数に変換されます)
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/no_non-null_object/index.html b/files/ja/web/javascript/reference/errors/no_non-null_object/index.html new file mode 100644 index 0000000000..d602d95826 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/no_non-null_object/index.html @@ -0,0 +1,66 @@ +--- +title: 'TypeError: "x" is not a non-null object' +slug: Web/JavaScript/Reference/Errors/No_non-null_object +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/No_non-null_object +--- +
{{JSSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: "x" is not a non-null object (Firefox)
+TypeError: Property description must be an object: "x" (Chrome)
+TypeError: Invalid value used in weak set (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}

+ +

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

+ +

どこかでオブジェクトが期待されていますが、提供されませんでした。{{jsxref("null")}} はオブジェクトではなく、動作しません。与えられた状況で適切なオブジェクトを提供しなければなりません。

+ +

+ +

プロパティディスクリプタが想定される

+ +

{{jsxref("Object.create()")}} メソッドや {{jsxref("Object.defineProperty()")}} メソッド、{{jsxref("Object.defineProperties()")}} メソッドを使用するとき、省略可能なディスクリプタ引数として、プロパティディスクリプタオブジェクトが想定されます。(ただの数値のように) オブジェクトを提供しないと、エラーをスローします:

+ +
Object.defineProperty({}, 'key', 1);
+// TypeError: 1 is not a non-null object
+
+Object.defineProperty({}, 'key', null);
+// TypeError: null is not a non-null object
+
+ +

有効なプロパティディスクリプタはこのようになります:

+ +
Object.defineProperty({}, 'key', { value: 'foo', writable: false });
+
+ +

WeakMap オブジェクトと WeakSet オブジェクトはオブジェクトキーが必要

+ +

{{jsxref("WeakMap")}} オブジェクトと {{jsxref("WeakSet")}} オブジェクトはオブジェクトキーを保持します。そのほかの型をキーとして使用できません。

+ +
var ws = new WeakSet();
+ws.add('foo');
+// TypeError: "foo" is not a non-null object
+ +

代わりにオブジェクトを使用します:

+ +
ws.add({foo: 'bar'});
+ws.add(window);
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/no_properties/index.html b/files/ja/web/javascript/reference/errors/no_properties/index.html new file mode 100644 index 0000000000..d699a0767f --- /dev/null +++ b/files/ja/web/javascript/reference/errors/no_properties/index.html @@ -0,0 +1,40 @@ +--- +title: 'TypeError: "x" has no properties' +slug: Web/JavaScript/Reference/Errors/No_properties +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/No_properties +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: null has no properties
+TypeError: undefined has no properties
+
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}。

+ +

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

+ +

{{jsxref("null")}} と {{jsxref("undefined")}} に、アクセス可能なプロパティはありません。

+ +

+ +
null.foo;
+// TypeError: null has no properties
+
+undefined.bar;
+// TypeError: undefined has no properties
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/no_variable_name/index.html b/files/ja/web/javascript/reference/errors/no_variable_name/index.html new file mode 100644 index 0000000000..f72764f8cd --- /dev/null +++ b/files/ja/web/javascript/reference/errors/no_variable_name/index.html @@ -0,0 +1,90 @@ +--- +title: 'SyntaxError: missing variable name' +slug: Web/JavaScript/Reference/Errors/No_variable_name +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/No_variable_name +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の例外 "missing variable name" が頻繁に発生するのは、物の名前を付けるのが大変だからです。あるいは、カンマが間違っているかもしれません。タイプミスがないかチェックしましょう

+ +

メッセージ

+ +
SyntaxError: missing variable name (Firefox)
+SyntaxError: Unexpected token = (Chrome)
+ +

エラー種別

+ +

{{jsxref("SyntaxError")}}

+ +

エラーの原因

+ +

変数名に名前がありません。これはコードの構文エラーが原因である可能性があります。おそらく、どこかでカンマが間違っているか、名前を付けるのに苦戦しているかです。分かります。名前を付けるのは難しいです。

+ + + +

+ +

変数名を忘れている

+ +
var = "foo";
+
+ +

良い変数名を考えるのは大変です。みんなそうでした。

+ +
var ohGodWhy = "foo";
+ +

予約語は変数名にできない

+ +

いくつかの変数名は予約語です。使用できません。ごめんなさい:(

+ +
var debugger = "whoop";
+// SyntaxError: missing variable name
+
+ +

複数の変数宣言

+ +

複数の変数を宣言するときは、カンマに特別な注意を払ってください。余分なカンマがありませんか?誤ってセミコロンの代わりにカンマを加えていませんか?

+ +
var x, y = "foo",
+var x, = "foo"
+
+var first = document.getElementById('one'),
+var second = document.getElementById('two'),
+
+// SyntaxError: missing variable name
+
+ +

修正版:

+ +
var x, y = "foo";
+var x = "foo";
+
+var first = document.getElementById('one');
+var second = document.getElementById('two');
+ +

配列

+ +

JavaScript の {{jsxref("Array")}} リテラルは、値を角括弧で囲む必要があります。これは動作しません。

+ +
var arr = 1,2,3,4,5;
+// SyntaxError: missing variable name
+
+ +

正しくは:

+ +
var arr = [1,2,3,4,5];
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/non_configurable_array_element/index.html b/files/ja/web/javascript/reference/errors/non_configurable_array_element/index.html new file mode 100644 index 0000000000..c0b577db67 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/non_configurable_array_element/index.html @@ -0,0 +1,78 @@ +--- +title: 'TypeError: can''t delete non-configurable array element' +slug: Web/JavaScript/Reference/Errors/Non_configurable_array_element +translation_of: Web/JavaScript/Reference/Errors/Non_configurable_array_element +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: can't delete non-configurable array element (Firefox)
+TypeError: Cannot delete property '2' of [object Array] (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}

+ +

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

+ +

配列を短縮しようとしていますが、配列の要素が変更不可です。配列の短縮をするとき、新しい配列の長さを超える要素は削除されますが、このシチュエーションでは失敗します。

+ +

configurable 属性はプロパティをオブジェクトから削除できるかどうか、および (writable 以外の) 変更できるかどうかを制御します。

+ +

通常、配列初期化子で生成されたオブジェクトのプロパティは変更可能です。しかし、たとえば {{jsxref("Object.defineProperty()")}} が使用された場合、既定でプロパティを変更できません。

+ +

+ +

Object.defineProperty で生成した変更不可能なプロパティ

+ +

プロパティを変更できないように指定する場合、{{jsxref("Object.defineProperty()")}} は既定で変更できないプロパティを生成します。

+ +
var arr = [];
+Object.defineProperty(arr, 0, {value: 0});
+Object.defineProperty(arr, 1, {value: "1"});
+
+arr.length = 1;
+// TypeError: can't delete non-configurable array element
+
+ +

配列を短縮したい場合、要素を変更可能に設定する必要があります。

+ +
var arr = [];
+Object.defineProperty(arr, 0, {value: 0, configurable: true});
+Object.defineProperty(arr, 1, {value: "1", configurable: true});
+
+arr.length = 1;
+
+ +

シールされた配列

+ +

{{jsxref("Object.seal()")}} 関数はすべての存在する要素を設定不可にします。

+ +
var arr = [1,2,3];
+Object.seal(arr);
+
+arr.length = 1;
+// TypeError: can't delete non-configurable array element
+
+ +

{{jsxref("Object.seal()")}} の呼び出しを削除するか、配列のコピーを取る必要があります。コピーの場合、コピーした配列の短縮は元の配列の長さに影響しません。/p>

+ +
var arr = [1,2,3];
+Object.seal(arr);
+
+// Copy the initial array to shorten the copy
+var copy = Array.from(arr);
+copy.length = 1;
+// arr.length == 3
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/not_a_codepoint/index.html b/files/ja/web/javascript/reference/errors/not_a_codepoint/index.html new file mode 100644 index 0000000000..c993da422c --- /dev/null +++ b/files/ja/web/javascript/reference/errors/not_a_codepoint/index.html @@ -0,0 +1,55 @@ +--- +title: 'RangeError: argument is not a valid code point' +slug: Web/JavaScript/Reference/Errors/Not_a_codepoint +tags: + - Errors + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Not_a_codepoint +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
RangeError: {0} is not a valid code point (Firefox)
+RangeError: Invalid code point {0} (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("RangeError")}}

+ +

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

+ +

{{jsxref("String.fromCodePoint()")}} メソッドは、有効なコードポイントのみを受け付けます。

+ +

コードポイントは、ユニコード文字集合の値です。これは整数 0 から 0x10FFFF までの範囲です。

+ +

{{jsxref("NaN")}} や、-1 などの負数(negative Integers)、3.14 などの非整数値(non-integers)、0x10FFFF1114111)より大きい値をこのメソッドで使うことはできません。

+ +

+ +

無効なケース

+ +
String.fromCodePoint('_');      // RangeError
+String.fromCodePoint(Infinity); // RangeError
+String.fromCodePoint(-1);       // RangeError
+String.fromCodePoint(3.14);     // RangeError
+String.fromCodePoint(3e-2);     // RangeError
+String.fromCodePoint(NaN);      // RangeError
+ +

有効なケース

+ +
String.fromCodePoint(42);       // "*"
+String.fromCodePoint(65, 90);   // "AZ"
+String.fromCodePoint(0x404);    // "\u0404"
+String.fromCodePoint(0x2F804);  // "\uD87E\uDC04"
+String.fromCodePoint(194564);   // "\uD87E\uDC04"
+String.fromCodePoint(0x1D306, 0x61, 0x1D307) // "\uD834\uDF06a\uD834\uDF07"
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/not_a_constructor/index.html b/files/ja/web/javascript/reference/errors/not_a_constructor/index.html new file mode 100644 index 0000000000..68b226a54f --- /dev/null +++ b/files/ja/web/javascript/reference/errors/not_a_constructor/index.html @@ -0,0 +1,95 @@ +--- +title: 'TypeError: "x" is not a constructor' +slug: Web/JavaScript/Reference/Errors/Not_a_constructor +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Not_a_constructor +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: "x" is not a constructor
+
+TypeError: Math is not a constructor
+TypeError: JSON is not a constructor
+TypeError: Symbol is not a constructor
+TypeError: Reflect is not a constructor
+TypeError: Intl is not a constructor
+TypeError: SIMD is not a constructor
+TypeError: Atomics is not a constructor
+
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}

+ +

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

+ +

オブジェクト、または変数をコンストラクターとして使おうとしていますが、それらがコンストラクターではありません。コンストラクターとは何かについては、{{Glossary("constructor","コンストラクター")}} か new 演算子を見てください。

+ +

{{jsxref("String")}} や {{jsxref("Array")}} のような、new を使用して生成できる数多くのグローバルオブジェクトがあります。しかし、いくつかのグローバルオブジェクトはそうではなく、 それらのプロパティやメソッドは静的です。次の JavaScript 標準ビルトインオブジェクトは、コンストラクターではありません: {{jsxref("Math")}} と {{jsxref("JSON")}}、{{jsxref("Symbol")}}、{{jsxref("Reflect")}}、{{jsxref("Intl")}}、{{jsxref("SIMD")}}、{{jsxref("Atomics")}}。

+ +

function* も、コンストラクターとして使用することはできません。

+ +

+ +

無効なケース

+ +
var Car = 1;
+new Car();
+// TypeError: Car is not a constructor
+
+new Math();
+// TypeError: Math is not a constructor
+
+new Symbol();
+// TypeError: Symbol is not a constructor
+
+function* f() {};
+var obj = new f;
+// TypeError: f is not a constructor
+
+ +

car コンストラクター

+ +

車のためのオブジェクト型を生成するとします。このオブジェクトの型が car と呼ばれ、make と model、year プロパティを持つとします。これを行うには、次の関数を定義します:

+ +
function Car(make, model, year) {
+  this.make = make;
+  this.model = model;
+  this.year = year;
+}
+
+ +

次のように mycar と呼ばれるオブジェクトを生成できます:

+ +
var mycar = new Car('Eagle', 'Talon TSi', 1993);
+ +

In Promises

+ +

When returning an immediately-resolved or immediately-rejected Promise, you do not need to create a new Promise(...) and act on it.

+ +

This is not legal (the Promise constructor is not being called correctly) and will throw a TypeError: this is not a constructor exception:

+ +
return new Promise.resolve(true);
+
+ +

Instead, use the Promise.resolve() or Promise.reject() static methods:

+ +
// This is legal, but unnecessarily long:
+return new Promise((resolve, reject) => { resolve(true); })
+
+// Instead, return the static method:
+return Promise.resolve(true);
+return Promise.reject(false);
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/not_a_function/index.html b/files/ja/web/javascript/reference/errors/not_a_function/index.html new file mode 100644 index 0000000000..9b679e9bd2 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/not_a_function/index.html @@ -0,0 +1,122 @@ +--- +title: 'TypeError: "x" is not a function' +slug: Web/JavaScript/Reference/Errors/Not_a_function +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Not_a_function +--- +
{{jsSidebar("Errors")}}
+ +

エラーメッセージ

+ +
TypeError: "x" is not a function
+
+ +

エラーの種類

+ +

{{jsxref("TypeError")}}.

+ +

エラーの原因

+ +

関数でないものを、関数呼び出ししようとした際に発生するエラーです。また適切な関数が定義されていることを期待されているが、定義されていない場合も発生します。

+ +

関数名のタイプミスをしていないか確認してみましょう。また、呼び出そうとしてるオブジェクトがそのメソッドを持っているかどうかも確認してみてください。配列オブジェクトが持っている map 関数を、それを持たない通常のオブジェクトに対して呼び出そうとしている場合が、後者の例になります。

+ +

多くの組み込み関数はコールバック関数を必要とします。これらのメソッドを正しく呼び出すためには、関数を引数に指定する必要があります:

+ + + +

このエラーを起こすコードの例

+ +

関数名のタイプミス

+ +

次のように関数名を間違っている場合に発生します。なおこのミスは非常に多く発生します:

+ +
var x = document.getElementByID("foo");
+// TypeError: document.getElementByID is not a function
+
+ +

正しい関数名は getElementById です:

+ +
var x = document.getElementById("foo");
+
+ +

間違ったオブジェクトに対する関数呼び出し

+ +

いくつかのメソッドは、引数に関数が指定されていることを期待していて、しかも特定のオブジェクトの上でのみ正しく動作するものがあります。この典型例が {{jsxref("Array.prototype.map()")}} で、これは {{jsxref("Array")}} オブジェクトでのみ正しく動作します。

+ +
var obj = { a: 13, b: 37, c: 42 };
+
+obj.map(function(num) {
+  return num * 2;
+});
+
+// TypeError: obj.map is not a function
+ +

オブジェクトではなく、配列を利用しましょう:

+ +
var numbers = [1, 4, 9];
+
+numbers.map(function(num) {
+  return num * 2;
+});
+
+// Array [ 2, 8, 18 ]
+
+ +

すでに存在するプロパティと名前を共有する関数

+ +

クラスを作るとき、時々プロパティと関数が同じ名前であることがあります。関数を呼び出すと、コンパイラーは関数が存在するのをやめたように考えます。

+ +
var Dog = function () {
+ this.age = 11;
+ this.color = "black";
+ this.name = "Ralph";
+ return this;
+}
+
+Dog.prototype.name = function(name) {
+ this.name = name;
+ return this;
+}
+
+
+var myNewDog = new Dog();
+myNewDog.name("Cassidy"); //Uncaught TypeError: myNewDog.name is not a function
+ +

代わりに異なるプロパティ名を使ってください:

+ +
var Dog = function () {
+ this.age = 11;
+ this.color = "black";
+ this.dogName = "Ralph"; //Using this.dogName instead of .name
+ return this;
+}
+
+Dog.prototype.name = function(name) {
+ this.dogName = name;
+ return this;
+}
+
+
+var myNewDog = new Dog();
+myNewDog.name("Cassidy"); //Dog { age: 11, color: 'black', dogName: 'Cassidy' }
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/not_defined/index.html b/files/ja/web/javascript/reference/errors/not_defined/index.html new file mode 100644 index 0000000000..3dc0feddee --- /dev/null +++ b/files/ja/web/javascript/reference/errors/not_defined/index.html @@ -0,0 +1,72 @@ +--- +title: 'ReferenceError: "x" is not defined' +slug: Web/JavaScript/Reference/Errors/Not_defined +tags: + - Error + - JavaScript + - ReferenceError +translation_of: Web/JavaScript/Reference/Errors/Not_defined +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の例外 "variable is not defined" は、どこかで参照している変数が存在しない場合に発生します。

+ +

メッセージ

+ +
ReferenceError: "x" is not defined
+
+ +

エラー種別

+ +

{{jsxref("ReferenceError")}}.

+ +

原因

+ +

どこかで存在しない変数を参照しています。この変数を宣言しておくか、現在のスクリプトまたはスコープで利用可能であることを確認する必要があります。

+ +
+

メモ: ライブラリ (jQuery など) を読み込むとき、ライブラリの変数、例えば "$" にアクセスする前に読み込みが行われるかを確認してください。ライブラリを読み込む {{HTMLElement("script")}} 要素は、それを使用するコードよりも前に置いてください。

+
+ +

+ +

宣言されていない変数

+ +
foo.substring(1); // ReferenceError: foo is not defined
+
+ +

"foo" と言う変数はどこにも宣言されていません。これは文字列である必要があり、それならば {{jsxref("String.prototype.substring()")}} メソッドが動作します。

+ +
var foo = 'bar';
+foo.substring(1); // "ar"
+ +

スコープの間違い

+ +

変数は現在の実行コンテキストで利用可能である必要があります。関数の中で定義された変数は、その関数のスコープ内でしか定義されていないので、関数の外のどこからもアクセスできません。

+ +
function numbers() {
+  var num1 = 2,
+      num2 = 3;
+  return num1 + num2;
+}
+
+console.log(num1); // ReferenceError num1 is not defined.
+ +

しかし、関数はそれが定義されたスコープ内で定義されたすべての変数と関数にアクセスすることができます。言い換えれば、グローバルスコープで定義された関数は、グローバルスコープ内で定義されたすべての変数にアクセスすることができます。/p>

+ +
var num1 = 2,
+    num2 = 3;
+
+function numbers() {
+  return num1 + num2;
+}
+
+console.log(numbers()); // 5
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/precision_range/index.html b/files/ja/web/javascript/reference/errors/precision_range/index.html new file mode 100644 index 0000000000..3835308c42 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/precision_range/index.html @@ -0,0 +1,96 @@ +--- +title: 'RangeError: precision is out of range' +slug: Web/JavaScript/Reference/Errors/Precision_range +tags: + - Errors + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Precision_range +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
RangeError: precision {0} out of range (Firefox)
+RangeError: toExponential() argument must be between 0 and 20 (Chrome)
+RangeError: toFixed() digits argument must be between 0 and 20 (Chrome)
+RangeError: toPrecision() argument must be between 1 and 21 (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("RangeError")}}

+ +

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

+ +

これらのメソッドのいずれかで、 範囲外の精度を引数を使用しています:

+ + + +

これらのメソッドで許可されている範囲は、通常 0 と 20(または 21)の間です。しかし、ECMAScript 仕様では、この範囲の拡張が認められています。

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
メソッドFirefox (SpiderMonkeyChrome, Opera (V8)
{{jsxref("Number.prototype.toExponential()")}}0 から 1000 から 20
{{jsxref("Number.prototype.toFixed()")}}-20 から 1000 から 20
{{jsxref("Number.prototype.toPrecision()")}}1 から 1001 から 21
+ +

+ +

無効なケース

+ +
77.1234.toExponential(-1);  // RangeError
+77.1234.toExponential(101); // RangeError
+
+2.34.toFixed(-100);         // RangeError
+2.34.toFixed(1001);         // RangeError
+
+1234.5.toPrecision(-1);     // RangeError
+1234.5.toPrecision(101);    // RangeError
+
+ +

有効なケース

+ +
77.1234.toExponential(4); // 7.7123e+1
+77.1234.toExponential(2); // 7.71e+1
+
+2.34.toFixed(1); // 2.3
+2.35.toFixed(1); // 2.4 (この場合は丸めが発生することに注意してください)
+
+5.123456.toPrecision(5); // 5.1235
+5.123456.toPrecision(2); // 5.1
+5.123456.toPrecision(1); // 5
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/property_access_denied/index.html b/files/ja/web/javascript/reference/errors/property_access_denied/index.html new file mode 100644 index 0000000000..30015bdc4f --- /dev/null +++ b/files/ja/web/javascript/reference/errors/property_access_denied/index.html @@ -0,0 +1,51 @@ +--- +title: 'Error: Permission denied to access property "x"' +slug: Web/JavaScript/Reference/Errors/Property_access_denied +tags: + - Error + - Errors + - JavaScript + - Security +translation_of: Web/JavaScript/Reference/Errors/Property_access_denied +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の例外 "Permission denied to access property" は、権限がない状態でオブジェクトへのアクセスの試行があった場合に発生します。

+ +

メッセージ

+ +
Error: Permission denied to access property "x"
+
+ +

エラー種別

+ +

{{jsxref("Error")}}

+ +

原因

+ +

権限がない状態でオブジェクトへのアクセスの試行がありました。これは異なるドメインから読み込んだ {{HTMLElement("iframe")}} 要素が同一オリジンポリシーに違反する場合などです。

+ +

+ +

文書にアクセスする権限がない

+ +
<!DOCTYPE html>
+<html>
+  <head>
+    <iframe id="myframe" src="http://www1.w3c-test.org/common/blank.html"></iframe>
+    <script>
+      onload = function() {
+        console.log(frames[0].document);
+        // Error: Permission denied to access property "document"
+      }
+    </script>
+  </head>
+  <body></body>
+</html>
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/read-only/index.html b/files/ja/web/javascript/reference/errors/read-only/index.html new file mode 100644 index 0000000000..7aa68e012f --- /dev/null +++ b/files/ja/web/javascript/reference/errors/read-only/index.html @@ -0,0 +1,81 @@ +--- +title: 'TypeError: "x" is read-only' +slug: Web/JavaScript/Reference/Errors/Read-only +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Read-only +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: "x" is read-only (Firefox)
+TypeError: 0 is read-only (Firefox)
+TypeError: Cannot assign to read only property 'x' of #<Object> (Chrome)
+TypeError: Cannot assign to read only property '0' of [object Array] (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}

+ +

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

+ +

値を割り当てようとしたグローバル変数、またはオブジェクトのプロパティが読み取り専用プロパティです。(技術的には、 non-writable データプロパティ です。)

+ +

このエラーは、strict モードコード のときにだけ発生します。strict コードではない場合、割り当ては無視されるだけです。

+ +

+ +

無効なケース

+ +

読み取り専用プロパティはさほど一般的ではありませんが、 {{jsxref("Object.defineProperty()")}}、または {{jsxref("Object.freeze()")}} を使用して生成できます。

+ +
"use strict";
+var obj = Object.freeze({name: "Elsa", score: 157});
+obj.score = 0;  // TypeError
+
+"use strict";
+Object.defineProperty(this, "LUNG_COUNT", {value: 2, writable: false});
+LUNG_COUNT = 3;  // TypeError
+
+"use strict";
+var frozenArray = Object.freeze([0, 1, 2]);
+frozenArray[0]++;  // TypeError
+
+ +

JavaScript のビルトインにも、いくつか読み取り専用プロパティがあります。 Math の定数を再定義しようとしたとします。

+ +
"use strict";
+Math.PI = 4;  // TypeError
+
+ +

残念ながらできません。

+ +

グローバル変数の undefined も読み取り専用のため、このようにすると悪名高い "undefined is not a function" エラーが発生します:

+ +
"use strict";
+undefined = function () {};  // TypeError: "undefined" is read-only
+
+ +

有効なケース

+ +
"use strict";
+var obj = Object.freeze({name: "Score", points: 157});
+obj = {name: obj.name, points: 0};   // 新しいオブジェクトで置き換える
+
+"use strict";
+var LUNG_COUNT = 2;  // `var` が使われているので、読み取り専用ではない
+LUNG_COUNT = 3;  // ok (解剖学的にはおかしいけれども)
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/redeclared_parameter/index.html b/files/ja/web/javascript/reference/errors/redeclared_parameter/index.html new file mode 100644 index 0000000000..c8baee62ea --- /dev/null +++ b/files/ja/web/javascript/reference/errors/redeclared_parameter/index.html @@ -0,0 +1,61 @@ +--- +title: 'SyntaxError: redeclaration of formal parameter "x"' +slug: Web/JavaScript/Reference/Errors/Redeclared_parameter +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Redeclared_parameter +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の例外 "redeclaration of formal parameter" は、関数の引数名としてある変数名が発生した後、関数本体内の {{jsxref("Statements/let", "let")}} 代入文を使用して同じ変数名を再度宣言すると発生します。

+ +

メッセージ

+ +
SyntaxError: Let/Const redeclaration (Edge)
+SyntaxError: redeclaration of formal parameter "x" (Firefox)
+SyntaxError: Identifier "x" has already been declared (Chrome)
+
+ +

エラー種別

+ +

{{jsxref("SyntaxError")}}

+ +

エラーの原因

+ +

関数の引数と同名の変数があり、関数内で再度 {{jsxref("Statements/let", "let")}} 代入文を使用して再宣言しています。 JavaScript では、同じ関数内やブロックスコープ内で let を使用して同じ変数を再宣言できません。

+ +

+ +

再宣言した引数

+ +

この場合、変数 "arg" は、引数を再宣言しています。

+ +
function f(arg) {
+  let arg = 'foo';
+}
+
+// SyntaxError: redeclaration of formal parameter "arg"
+
+ +

関数の本体内で "arg" の値を変更したい場合、これを行うことはできますが、再び同じ変数を宣言する必要はありません。言い換えれば、 let キーワードを省略することができます。新しい変数を生成する場合は、既存の関数の引数と競合するので、変数名を変更する必要があります。

+ +
function f(arg) {
+  arg = 'foo';
+}
+
+function f(arg) {
+  let bar = 'foo';
+}
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html b/files/ja/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html new file mode 100644 index 0000000000..4af643bcdb --- /dev/null +++ b/files/ja/web/javascript/reference/errors/reduce_of_empty_array_with_no_initial_value/index.html @@ -0,0 +1,88 @@ +--- +title: 'TypeError: Reduce of empty array with no initial value' +slug: Web/JavaScript/Reference/Errors/Reduce_of_empty_array_with_no_initial_value +tags: + - Error + - JavaScript + - Reference + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Reduce_of_empty_array_with_no_initial_value +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: reduce of empty array with no initial value
+
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}

+ +

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

+ +

JavaScript には、複数の reduce 関数があります:

+ + + +

これらの関数は、オプションとして (最初に callback が呼び出される際の最初の引数として使用される) initialValue を受け取ります。しかし、初期値を提供しない場合は、{{jsxref("Array")}} や {{jsxref("TypedArray")}} の最初の要素が初期値として使用されます。空の配列が提供されて初期値を取得できない場合にこのエラーが発生します。

+ +

+ +

無効なケース

+ +

この問題は、しばしばリストのすべての要素を取り除くフィルター ({{jsxref("Array.prototype.filter()")}}、{{jsxref("TypedArray.prototype.filter()")}}) で結合した際に発生します。したがって、初期値がないまま使用することになります。

+ +
var ints = [0, -1, -2, -3, -4, -5];
+ints.filter(x => x > 0)         // removes all elements
+    .reduce((x, y) => x + y)    // no more elements to use for the initial value.
+ +

似たようなケースとして、セレクターに typo がある場合やリストに予想外の数の要素がある場合に同様の問題が発生します:

+ +
var names = document.getElementsByClassName("names");
+var name_list = Array.prototype.reduce.call(names, (acc, name) => acc + ", " + name);
+
+ +

有効なケース

+ +

これらの問題は、2 つの異なる方法で解決できます。

+ +

1 つ目の方法は、initialValue を提供することです; 加算の場合には 0、乗算の場合には 1、文字連結の場合は空文字など、その操作にとって自然な値を指定します。

+ +
var ints = [0, -1, -2, -3, -4, -5];
+ints.filter(x => x < 0)         // removes all elements
+    .reduce((x, y) => x + y, 0) // the initial value is the neutral element of the addition
+
+ +

もう 1 つの方法は、reduce を呼び出す前、または予期しないダミーの初期値を追加した後にコールバックで空のケースを処理する 2 つの方法です。

+ +
var names = document.getElementsByClassName("names");
+
+var name_list1 = "";
+if (names1.length >= 1)
+  name_list1 = Array.prototype.reduce.call(names, (acc, name) => acc + ", " + name);
+// name_list1 == "" when names is empty.
+
+var name_list2 = Array.prototype.reduce.call(names, (acc, name) => {
+  if (acc == "") // initial value
+    return name;
+  return acc + ", " + name;
+}, "");
+// name_list2 == "" when names is empty.
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/reserved_identifier/index.html b/files/ja/web/javascript/reference/errors/reserved_identifier/index.html new file mode 100644 index 0000000000..7f2ef49d74 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/reserved_identifier/index.html @@ -0,0 +1,80 @@ +--- +title: 'SyntaxError: "x" is a reserved identifier' +slug: Web/JavaScript/Reference/Errors/Reserved_identifier +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Reserved_identifier +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: "x" is a reserved identifier (Firefox)
+SyntaxError: Unexpected reserved word (Chrome)
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}

+ +

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

+ +

予約語を識別子として使用した場合、エラーをスローします。これらは strict モードと通常モードの双方で予約されています:

+ + + +

次のものは strict モードのコードでのみ予約されています:

+ + + +

+ +

Strict モードと 非 Strict モードで予約されているキーワード

+ +

enum 識別子は全般的に予約されています。

+ +
var enum = { RED: 0, GREEN: 1, BLUE: 2 };
+// SyntaxError: enum is a reserved identifier
+
+ +

strict モードのコードでは、より多くの識別子が予約されています。

+ +
"use strict";
+var package = ["potatoes", "rice", "fries"];
+// SyntaxError: package is a reserved identifier
+
+ +

これらの変数名を変更する必要があります。

+ +
var colorEnum = { RED: 0, GREEN: 1, BLUE: 2 };
+var list = ["potatoes", "rice", "fries"];
+ +

古いブラウザーを更新する

+ +

たとえば、letclass をまだ実装していない古いブラウザーを使用している場合、それらの新しい言語機能をサポートしているより新しいブラウザーにアップデートすべきです。

+ +
"use strict";
+class DocArchiver {}
+
+// SyntaxError: class is a reserved identifier
+// (たとえば、Firefox 44 以前の古いブラウザーはエラーをスローします)
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/resulting_string_too_large/index.html b/files/ja/web/javascript/reference/errors/resulting_string_too_large/index.html new file mode 100644 index 0000000000..cf8ca31ba1 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/resulting_string_too_large/index.html @@ -0,0 +1,49 @@ +--- +title: 'RangeError: repeat count must be less than infinity' +slug: Web/JavaScript/Reference/Errors/Resulting_string_too_large +tags: + - Errors + - JavaScript + - RangeError +translation_of: Web/JavaScript/Reference/Errors/Resulting_string_too_large +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
RangeError: repeat count must be less than infinity and not overflow maximum string size (Firefox)
+
+RangeError: Invalid count value (Chrome)
+
+ +

エラータイプ

+ +

{{jsxref("RangeError")}}

+ +

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

+ +

{{jsxref("String.prototype.repeat()")}} メソッドを使用します。count パラメーターは、文字列の繰り返し回数を指定します。 これは 0 から正の {{jsxref("Infinity")}} 以下の値である必要があり、負数は使用できません。有効値の範囲はこのように表現できます: [0, +∞)。

+ +

結果の文字列は、文字列サイズの最大値以上にはできません。これは JavaScript エンジンによって異なります。 Firefox(SpiderMonkey) の最大文字列数hは、 228 -1 (0xFFFFFFF)です。

+ +

+ +

無効なケース

+ +
'abc'.repeat(Infinity); // RangeError
+'a'.repeat(2**28);      // RangeError
+
+ +

有効なケース

+ +
'abc'.repeat(0);    // ''
+'abc'.repeat(1);    // 'abc'
+'abc'.repeat(2);    // 'abcabc'
+'abc'.repeat(3.5);  // 'abcabcabc' (count は整数に変換されます)
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/stmt_after_return/index.html b/files/ja/web/javascript/reference/errors/stmt_after_return/index.html new file mode 100644 index 0000000000..e41eaa6b86 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/stmt_after_return/index.html @@ -0,0 +1,81 @@ +--- +title: 'Warning: unreachable code after return statement' +slug: Web/JavaScript/Reference/Errors/Stmt_after_return +tags: + - JavaScript + - Warning + - エラー + - 警告 +translation_of: Web/JavaScript/Reference/Errors/Stmt_after_return +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の警告 "unreachable code after return statement" は、 {{jsxref("Statements/return", "return")}} 文の後で式を使用したり、セミコロンのない return 文を使用して、その直後に式を置いたりした場合に発生します。

+ +

メッセージ

+ +
Warning: unreachable code after return statement (Firefox)
+
+ +

エラー種別

+ +

警告

+ +

原因

+ +

unreachable code after a return statement は、以下のような場合に発生することがあります。

+ + + +

有効な return 文の後に式がある場合、警告は return 文の後のコードには到達しない、つまり決して実行されないことを表します。

+ +

return 文の後にセミコロンをつけるべきなのはなぜでしょうか。セミコロンがない return 文の場合、開発者が次の行にある文を返そうとしているのか、処理を停止して戻ろうとしているのかが不明確になってしまいます。この警告は、 return 文の書かれ方にあいまいさがあることを示しています。

+ +

以下の文の場合、セミコロンがない場合の return の警告は表示されません。

+ + + +

+ +

無効な場合

+ +
function f() {
+  var x = 3;
+  x += 4;
+  return x;   // return は直ちに関数を終了します。
+  x -= 3;     // そのため、この行は実行されません。到達不可能です。
+}
+
+function f() {
+  return     // これは `return;` のように扱われます。
+    3 + 4;   // そのため、関数を抜け出し、この行には決して到達しません。
+}
+
+ +

妥当な場合

+ +
function f() {
+  var x = 3;
+  x += 4;
+  x -= 3;
+  return x;  // OK: すべての式の後に return があります。
+}
+
+function f() {
+  return 3 + 4  // OK: 同じ行に式があるセミコロンなしの return です。
+}
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/strict_non_simple_params/index.html b/files/ja/web/javascript/reference/errors/strict_non_simple_params/index.html new file mode 100644 index 0000000000..db18025e07 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/strict_non_simple_params/index.html @@ -0,0 +1,111 @@ +--- +title: 'SyntaxError: "use strict" not allowed in function with non-simple parameters' +slug: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params +tags: + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Strict_Non_Simple_Params +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
Firefox:
+SyntaxError: "use strict" not allowed in function with default parameter
+SyntaxError: "use strict" not allowed in function with rest parameter
+SyntaxError: "use strict" not allowed in function with destructuring parameter
+
+Chrome:
+SyntaxError: Illegal 'use strict' directive in function with non-simple parameter list
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}。

+ +

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

+ +

次の引数のうちいずれかを持つ関数の先頭に "use strict" ディレクティブが書かれています:

+ + + +

ECMAScript 仕様に則って、このような関数の先頭では "use strict" を使用できません。

+ +

+ +

Function ステートメント

+ +

このケースでは、関数 sum は既定値を持つ引数 a=1b=2 を持っています:

+ +
function sum(a=1, b=2) {
+  // SyntaxError: "use strict" not allowed in function with default parameter
+  "use strict";
+  return a + b;
+}
+
+ +

関数を strict モードにしたい、かつスクリプト全体、またはエンクロージャー関数が strict モードになってもよいなら、"use strict" ディレクティブを関数の外側に移動できます:

+ +
"use strict";
+function sum(a=1, b=2) {
+  return a + b;
+}
+
+ +

Function 式

+ +

function 式では、別の回避策をとることができます:

+ +
var sum = function sum([a, b]) {
+  // SyntaxError: "use strict" not allowed in function with destructuring parameter
+  "use strict";
+  return a + b;
+};
+
+ +

これは、次の式に変換できます:

+ +
var sum = (function() {
+  "use strict";
+  return function sum([a, b]) {
+    return a + b;
+  };
+})();
+
+ +

アロー関数

+ +

アロー関数が this 変数にアクセスする必要がある場合、アロー関数をエンクロージャー関数として使用できます:

+ +
var callback = (...args) => {
+  // SyntaxError: "use strict" not allowed in function with rest parameter
+  "use strict";
+  return this.run(args);
+};
+
+ +

これは、次の式に変換できます:

+ +
var callback = (() => {
+  "use strict";
+  return (...args) => {
+    return this.run(args);
+  };
+})();
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/too_much_recursion/index.html b/files/ja/web/javascript/reference/errors/too_much_recursion/index.html new file mode 100644 index 0000000000..d58ea41eb0 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/too_much_recursion/index.html @@ -0,0 +1,119 @@ +--- +title: 'InternalError: too much recursion' +slug: Web/JavaScript/Reference/Errors/Too_much_recursion +tags: + - Error + - Errors + - InternalError + - JavaScript +translation_of: Web/JavaScript/Reference/Errors/Too_much_recursion +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
Error: Out of stack space (Edge)
+InternalError: too much recursion (Firefox)
+RangeError: Maximum call stack size exceeded (Chrome)
+
+ +

エラーの種類

+ +

{{jsxref("InternalError")}}。

+ +

エラーの原因

+ +

自分自身を呼び出す関数は再帰関数と呼ばれます。ある条件を満たすと、関数は自分自身を呼び出すのをやめます。これは基礎ケースと呼ばれます。

+ +

いくつかの点で、再帰はループに似ています。両方とも、同じコードを複数回実行し、 (無限ループまたは無限再帰を避けるために) 条件を必要とします。関数の再帰呼び出しが深すぎる場合、または関数が基礎ケースを欠いている場合、 JavaScript はこのエラーを発生します。

+ +

+ +

終了条件に従って、この再帰関数は 10 回実行されます。

+ +
function loop(x) {
+  if (x >= 10) // "x >= 10" は終了条件
+    return;
+  // 何かを実行
+  loop(x + 1); // 再帰呼び出し
+}
+loop(0);
+ +

この条件に、非常に大きい値を設定すると動作しません。

+ +
function loop(x) {
+  if (x >= 1000000000000)
+    return;
+  // 何かを実行
+  loop(x + 1);
+}
+loop(0);
+
+// InternalError: too much recursion
+ +

この再帰関数は基礎ケースを欠いています。脱出条件がないため、この関数は自分自身を無限に呼び出し続けます。

+ +
function loop(x) {
+ // The base case is missing
+
+loop(x + 1); // 再帰呼び出し
+}
+
+loop(0);
+
+// InternalError: too much recursion
+ +

Class error: too much recursion

+ +
class Person{
+	constructor(){}
+	set name(name){
+		this.name = name; // 再帰呼び出し
+	}
+}
+
+
+const tony = new Person();
+tony.name = "Tonisha"; // InternalError: too much recursion
+
+ +

値がプロパティ name に代入されるとき (this.name = name;) JavaScript はプロパティを設定する必要があります。これが発生すると、セッター関数が呼び出されます。

+ +
set name(name){
+	this.name = name; // 再帰呼び出し
+}
+
+ +
+

この例では、セッターが呼び出されたとき、同じことを再度行うように指示されます。つまり、処理しているのと同じプロパティに設定します。これにより、関数は何度も何度も自分自身を呼び出し、無限に再帰が行われます。

+
+ +

この問題は同じ変数がゲッターに使用される場合にも発生します。

+ +
get name(){
+	return this.name; // 再帰呼び出し
+}
+
+ +

この問題を防ぐには、セッター関数の内部で代入しようとしているプロパティが、もともとセッターを起動したものと異なっていることを確認してください。同じことがゲッターにも言えます。

+ +
class Person{
+	constructor(){}
+	set name(name){
+		this._name = name;
+	}
+	get name(){
+		return this._name;
+	}
+}
+const tony = new Person();
+tony.name = "Tonisha";
+console.log(tony);
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/typed_array_invalid_arguments/index.html b/files/ja/web/javascript/reference/errors/typed_array_invalid_arguments/index.html new file mode 100644 index 0000000000..b1c8d14d35 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/typed_array_invalid_arguments/index.html @@ -0,0 +1,77 @@ +--- +title: 'TypeError: invalid arguments' +slug: Web/JavaScript/Reference/Errors/Typed_array_invalid_arguments +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Typed_array_invalid_arguments +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: invalid arguments (Firefox)
+ +

エラータイプ

+ +

{{jsxref("TypeError")}}

+ +

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

+ +

新しい typed array を生成するために、Typed array コンストラクターに以下のいずれかの値を渡す必要があります。

+ + + +

そのほかのコンストラクター引数では、有効な typed array を生成できません。

+ +

+ +

Typed array、たとえば {{jsxref("Uint8Array")}} は文字列から構成できません。事実、文字列はまったく typed array にすることはできません。

+ +
var ta = new Uint8Array("nope");
+// TypeError: invalid arguments
+
+ +

有効な {{jsxref("Uint8Array")}} を生成するほかの方法:

+ +
// From a length
+var uint8 = new Uint8Array(2);
+uint8[0] = 42;
+console.log(uint8[0]); // 42
+console.log(uint8.length); // 2
+console.log(uint8.BYTES_PER_ELEMENT); // 1
+
+// From an array
+var arr = new Uint8Array([21,31]);
+console.log(arr[1]); // 31
+
+// From another TypedArray
+var x = new Uint8Array([21, 31]);
+var y = new Uint8Array(x);
+console.log(y[0]); // 21
+
+// From an ArrayBuffer
+var buffer = new ArrayBuffer(8);
+var z = new Uint8Array(buffer, 1, 4);
+
+// From an iterable
+var iterable = function*(){ yield* [1,2,3]; }();
+var uint8 = new Uint8Array(iterable);
+// Uint8Array[1, 2, 3]
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/undeclared_var/index.html b/files/ja/web/javascript/reference/errors/undeclared_var/index.html new file mode 100644 index 0000000000..1f5f446286 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/undeclared_var/index.html @@ -0,0 +1,67 @@ +--- +title: 'ReferenceError: assignment to undeclared variable "x"' +slug: Web/JavaScript/Reference/Errors/Undeclared_var +tags: + - Errors + - JavaScript + - ReferenceError + - Strict Mode +translation_of: Web/JavaScript/Reference/Errors/Undeclared_var +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
ReferenceError: assignment to undeclared variable "x" (Firefox)
+ReferenceError: "x" is not defined (Chrome)
+ReferenceError: Variable undefined in strict mode (Edge)
+
+ +

エラータイプ

+ +

strict モード でのみ、{{jsxref("ReferenceError")}} の警告が出ます。

+ +

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

+ +

宣言していない変数に値を割り当てています。つまり、var キーワードを使用せずに割り当てをしています。 宣言した変数と宣言していない変数の間には、予想外の結果を招くいくつかの違いがあります。それが、strict モードで JavaScript がエラーを発生させる理由です。

+ +

宣言した変数と宣言していない変数について、3 つの注意点があります:

+ + + +

詳細や具体例は、var 参照ページを見てください。

+ +

strict モードのコード でのみ、宣言していない変数割り当てエラーが発生します。非 strict コードでは、それらは暗黙裡に無視されます。

+ +

+ +

無効なケース

+ +

このケースでは、変数 "bar" は宣言していない変数です。

+ +
function foo() {
+  "use strict";
+  bar = true;
+}
+foo(); // ReferenceError: assignment to undeclared variable bar
+
+ +

有効なケース

+ +

"bar" を宣言した変数にするために、"bar" の前に、var キーワードを追加します。

+ +
function foo() {
+  "use strict";
+  var bar = true;
+}
+foo();
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/undefined_prop/index.html b/files/ja/web/javascript/reference/errors/undefined_prop/index.html new file mode 100644 index 0000000000..cb2ec02f1a --- /dev/null +++ b/files/ja/web/javascript/reference/errors/undefined_prop/index.html @@ -0,0 +1,59 @@ +--- +title: 'ReferenceError: reference to undefined property "x"' +slug: Web/JavaScript/Reference/Errors/Undefined_prop +tags: + - Errors + - JavaScript + - ReferenceError + - Strict Mode +translation_of: Web/JavaScript/Reference/Errors/Undefined_prop +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
ReferenceError: reference to undefined property "x" (Firefox)
+
+ +

エラータイプ

+ +

strict モード でのみ、{{jsxref("ReferenceError")}} の警告が出ます。

+ +

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

+ +

存在しないオブジェクトのプロパティにアクセスしようとしています。プロパティにアクセスする方法は 2 つあります。詳細については、メンバー演算子参照ページを見てください。

+ +

未定義プロパティを参照することによるエラーは、strict モードのコードでのみ発生します。非 strict コードでは、暗黙的に無視されます。

+ +

+ +

無効なケース

+ +

このケースでは、"bar" は未定義のプロパティです。

+ +
"use strict";
+
+var foo = {};
+foo.bar; // ReferenceError: reference to undefined property "bar"
+
+ +

有効なケース

+ +

エラーを避けるには、"bar" プロパティを定義するか、使用する前に "bar" プロパティが存在するか確認する必要があります(たとえば、{{jsxref("Object.prototype.hasOwnProperty()")}} メソッドを使用します)。

+ +
"use strict";
+
+var foo = {};
+
+foo.bar = "moon";
+console.log(foo.bar); // "moon"
+
+if (foo.hasOwnProperty("bar") {
+  console.log(foo.bar);
+}
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/unexpected_token/index.html b/files/ja/web/javascript/reference/errors/unexpected_token/index.html new file mode 100644 index 0000000000..df9f554ab2 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/unexpected_token/index.html @@ -0,0 +1,81 @@ +--- +title: 'SyntaxError: Unexpected token' +slug: Web/JavaScript/Reference/Errors/Unexpected_token +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Unexpected_token +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: expected expression, got "x"
+SyntaxError: expected property name, got "x"
+SyntaxError: expected target, got "x"
+SyntaxError: expected rest argument name, got "x"
+SyntaxError: expected closing parenthesis, got "x"
+SyntaxError: expected '=>' after argument list, got "x"
+
+ +

エラー種別

+ +

{{jsxref("SyntaxError")}}

+ +

エラーの原因

+ +

特定の言語構造が予想されている箇所に、ほかのものが提供されています。これは単純なタイプミスの可能性があります。

+ +

+ +

式が期待される

+ +

たとえば関数を呼び出すとき、末尾のカンマは許可されていません。

+ +
for (let i = 0; i < 5,; ++i) {
+  console.log(i);
+}
+// SyntaxError: expected expression, got ')'
+
+ +

正しくは、カンマを省略するか、他の式を追加するかしてください。

+ +
for (let i = 0; i < 5; ++i) {
+  console.log(i);
+}
+
+ +

括弧の不足

+ +

時々、 if 文を囲む括弧を忘れることがあります。

+ +
function round(n, upperBound, lowerBound){
+  if(n > upperBound) || (n < lowerBound){
+    throw 'Number ' + String(n) + ' is more than ' + String(upperBound) + ' or less than ' + String(lowerBound);
+  }else if(n < ((upperBound + lowerBound)/2)){
+    return lowerBound;
+  }else{
+    return upperBound;
+  }
+} // SyntaxError: expected expression, got '||'
+ +

最初は括弧が正しく見えますが、 || が括弧の外にあることに注意してください。 || の周囲を括弧で囲むように修正してください。

+ +
function round(n, upperBound, lowerBound){
+  if((n > upperBound) || (n < lowerBound)){
+    throw 'Number ' + String(n) + ' is more than ' + String(upperBound) + ' or less than ' + String(lowerBound);
+  }else if(n < ((upperBound + lowerBound)/2)){
+    return lowerBound;
+  }else{
+    return upperBound;
+  }
+}
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/unexpected_type/index.html b/files/ja/web/javascript/reference/errors/unexpected_type/index.html new file mode 100644 index 0000000000..bf43a41039 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/unexpected_type/index.html @@ -0,0 +1,77 @@ +--- +title: 'TypeError: "x" is (not) "y"' +slug: Web/JavaScript/Reference/Errors/Unexpected_type +tags: + - Error + - Errors + - JavaScript + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Unexpected_type +--- +
{{jsSidebar("Errors")}}
+ +

JavaScript の例外 "x is (not) y" は、予期しない型があったときに発生します。よくあるのは、予期せず {{jsxref("undefined")}} または {{jsxref("null")}} の値があった場合です。

+ +

メッセージ

+ +
TypeError: Unable to get property {x} of undefined or null reference (Edge)
+TypeError: "x" is (not) "y" (Firefox)
+
+例:
+TypeError: "x" is undefined
+TypeError: "x" is null
+TypeError: "undefined" is not an object
+TypeError: "x" is not an object or null
+TypeError: "x" is not a symbol
+
+ +

エラー種別

+ +

{{jsxref("TypeError")}}。

+ +

エラーの原因

+ +

予期しない型がありました。これは {{jsxref("undefined")}} または {{jsxref("null")}} の値でしばしば発生します。

+ +

また、{{jsxref("Object.create()")}} や {{jsxref("Symbol.keyFor()")}} のようなある種のメソッドは、特定の型を要求し、それを提供する必要があります。

+ +

+ +

無効な場合

+ +
// undefined と null の場合、substring メソッドは動作しません。
+var foo = undefined;
+foo.substring(1); // TypeError: foo is undefined
+
+var foo = null;
+foo.substring(1); // TypeError: foo is null
+
+
+// ある種のメソッドでは、特定の型が求められることがあります。
+var foo = {}
+Symbol.keyFor(foo); // TypeError: foo is not a symbol
+
+var foo = 'bar'
+Object.create(foo); // TypeError: "foo" is not an object or null
+
+ +

問題の修正

+ +

null ポインターを undefined 値に修正するには、次のように typeof 演算子を用いて行うことができます。

+ +
if (foo !== undefined) {
+  // これで、 foo が定義されていることがわかるので、実行することができます。
+}
+
+if (typeof foo !== 'undefined') {
+  // 同じというのは良い考えですが、この実装を使わないでください。 - 本当の
+  // undefined の値と未宣言の変数が混同されて問題が発生する可能性があります。
+}
+
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/unnamed_function_statement/index.html b/files/ja/web/javascript/reference/errors/unnamed_function_statement/index.html new file mode 100644 index 0000000000..35abd0a3f6 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/unnamed_function_statement/index.html @@ -0,0 +1,115 @@ +--- +title: 'SyntaxError: function statement requires a name' +slug: Web/JavaScript/Reference/Errors/Unnamed_function_statement +tags: + - Error + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Unnamed_function_statement +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: function statement requires a name [Firefox]
+SyntaxError: Unexpected token ( [Chrome]
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}

+ +

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

+ +

コードに名前が必要な function ステートメントがあります。関数がどのように定義されているか、関数の名前を指定する必要があるかどうか、または問題の関数が関数式、{{Glossary("IIFE")}} である必要があるかどうか、 コードがこのコンテクストに正しく置かれているかどうかを確認する必要があります。

+ +

+ +

ステートメント vs 式

+ +

function ステートメント (または function 宣言) では名前が必要であり、これは動作しません:

+ +
function () {
+  return 'Hello world';
+}
+// SyntaxError: function statement requires a name
+
+ +

代わりに、function 式 (代入) を使用できます:

+ +
var greet = function() {
+  return 'Hello world';
+};
+ +

または、定義するとすぐに実行される IIFE (即時実行関数式) を定義しようとしているのかもしれません。その場合は、もう少々括弧が必要です:

+ +
(function () {
+
+})();
+ +

ラベル付けされた関数

+ +

関数 label を使用している場合、function キーワードの後に関数名を指定する必要があります。これは動作しません:

+ +
function Greeter() {
+  german: function () {
+    return "Moin";
+  }
+}
+// SyntaxError: function statement requires a name
+
+ +

たとえば、これは動作します:

+ +
function Greeter() {
+  german: function g() {
+    return "Moin";
+  }
+}
+ +

オブジェクトのメソッド

+ +

オブジェクトのメソッドを作るならば、オブジェクトを作る必要があります。その場合、function キーワードの後に名前がない次の構文は有効です。

+ +
var greeter = {
+  german: function () {
+    return "Moin";
+  }
+};
+ +

コールバック構文

+ +

コールバックを使用するときの構文もチェックします。大括弧とカンマが混同しやすいです。

+ +
promise.then(
+  function() {
+    console.log("success");
+  });
+  function() {
+    console.log("error");
+}
+// SyntaxError: function statement requires a name
+
+ +

正しくは:

+ +
promise.then(
+  function() {
+    console.log("success");
+  },
+  function() {
+    console.log("error");
+  }
+);
+
+ +

関連項目

+ + diff --git a/files/ja/web/javascript/reference/errors/unterminated_string_literal/index.html b/files/ja/web/javascript/reference/errors/unterminated_string_literal/index.html new file mode 100644 index 0000000000..be1022bda4 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/unterminated_string_literal/index.html @@ -0,0 +1,67 @@ +--- +title: 'SyntaxError: unterminated string literal' +slug: Web/JavaScript/Reference/Errors/Unterminated_string_literal +tags: + - Errors + - JavaScript + - SyntaxError +translation_of: Web/JavaScript/Reference/Errors/Unterminated_string_literal +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
SyntaxError: unterminated string literal
+
+ +

エラータイプ

+ +

{{jsxref("SyntaxError")}}

+ +

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

+ +

どこかに終端されていない {{jsxref("String")}} があります。文字列リテラルは、シングル(')かダブル(")のクオートで囲む必要があります。JavaScript は、シングルクオート文字列とダブルクオート文字列を区別しません。エスケープシーケンス はシングルクオートとダブルクオート、どちらの文字列でも動作します。このエラーを修正するためには、次の点をチェックしてください:

+ + + +

+ +

複数行

+ +

JavaScript では、次のように複数行にまたがる文字列を分割できません:

+ +
var longString = 'This is a very long string which needs
+                  to wrap across multiple lines because
+                  otherwise my code is unreadable.';
+// SyntaxError: unterminated string literal
+ +

替わりに、+ 演算子 かバックスラッシュ、template literal を使用します。+ 演算子だと、次のようになります:

+ +
var longString = 'This is a very long string which needs ' +
+                 'to wrap across multiple lines because ' +
+                 'otherwise my code is unreadable.';
+
+ +

または、文字列が次のように続くことを示すために、各行の終わりにバックスラッシュ文字("\")を使用することもできます。バックスラッシュの後に、(改行を除いて)スペースや文字、インデントを入れないようにしてください。そうしないと動作しません。バックスラッシュの場合、次のようになります:

+ +
var longString = 'This is a very long string which needs \
+to wrap across multiple lines because \
+otherwise my code is unreadable.';
+
+ +

ECMAScript 2015 環境でサポートされている template literal を使っても改行可能です。

+ +
var longString = `This is a very long string which needs
+                  to wrap across multiple lines because
+                  otherwise my code is unreadable.`;
+ +

関連情報

+ + diff --git a/files/ja/web/javascript/reference/errors/var_hides_argument/index.html b/files/ja/web/javascript/reference/errors/var_hides_argument/index.html new file mode 100644 index 0000000000..8653e6da87 --- /dev/null +++ b/files/ja/web/javascript/reference/errors/var_hides_argument/index.html @@ -0,0 +1,56 @@ +--- +title: 'TypeError: variable "x" redeclares argument' +slug: Web/JavaScript/Reference/Errors/Var_hides_argument +tags: + - Errors + - JavaScript + - Strict Mode + - TypeError +translation_of: Web/JavaScript/Reference/Errors/Var_hides_argument +--- +
{{jsSidebar("Errors")}}
+ +

メッセージ

+ +
TypeError: variable "x" redeclares argument (Firefox)
+
+ +

エラータイプ

+ +

strict モード でのみ、{{jsxref("TypeError")}} の警告がでます。

+ +

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

+ +

関数のパラメータとして使用されたものと同じ変数名が、関数のボディ内で var 割り当てを使用して再宣言されています。これは命名が競合する可能性があるため、JavaScript が警告を発します。

+ +

このエラーは、strict モードのコード でのみ発生します。非 strict モードでは、再宣言は暗黙裡に無視されます。

+ +

+ +

無効なケース

+ +

このケースでは、変数 "arg" 引数を再宣言しています。

+ +
"use strict";
+
+function f(arg) {
+  var arg = "foo";
+}
+
+ +

有効なケース

+ +

var ステートメントを省略するだけで、この警告を修正できます。なぜなら、変数はすでに存在しているからです。そのほかの方法として、関数のパラメータか変数名をリネームすることもできます。

+ +
"use strict";
+
+function f(arg) {
+  arg = "foo";
+}
+
+ +

関連項目

+ + -- cgit v1.2.3-54-g00ecf