diff options
Diffstat (limited to 'files/ja/web/javascript/reference/errors')
78 files changed, 5574 insertions, 0 deletions
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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">Warning: -file- is being assigned a //# sourceMappingURL, but already has one.</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>警告です。JavaScript の実行が停止されることはありません。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>JavaScript ソースに対して、ソースマップが複数回指定されています。</p> + +<p>より効率的にサーバから配信するため、しばしば JavaScript ソースの結合や縮小が行われます。 <a href="http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/">ソースマップ</a>を使用すると、デバッガーは実行されているコードとオリジナルのソースファイルをマッピングできます。ソースマップを割り当てるには、コメントを使用するか JavaScript ファイルにヘッダーを設定するかの 2 つの方法があります。</p> + +<h2 id="例">例</h2> + +<p>ファイルでコメントを使用してソースマップを設定します:</p> + +<pre class="brush: js example-good">//# sourceMappingURL=http://example.com/path/to/your/sourcemap.map</pre> + +<p>あるいは、JavaScript ファイルにヘッダーを設定することもできます:</p> + +<pre class="brush: js example-good">X-SourceMap: /path/to/file.js.map</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Tools/Debugger/How_to/Use_a_source_map">ソースマップを使用する – Firefox ツールドキュメント</a></li> + <li><a href="http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/">Introduction to source maps – HTML5 rocks</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}} +<h2 id="Message" name="Message">メッセージ</h2> +</div> + +<pre class="syntaxbox">TypeError: invalid Array.prototype.sort argument (Firefox) +</pre> + +<h2 id="Error_type" name="Error_type">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="What_went_wrong" name="What_went_wrong">何がうまくいかなかったのか?</h2> + +<p>{{jsxref("Array.prototype.sort()")}} の引数には、{{jsxref("undefined")}} かオペランドを比較する関数のいずれかが求められれます。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Invalid_cases" name="Invalid_cases">無効なケース</h3> + +<pre class="brush: js example-bad">[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 +</pre> + +<h3 id="Valid_cases" name="Valid_cases">有効なケース</h3> + +<pre class="brush: js example-good">[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]</pre> + +<h2 id="See_also" name="See_also">関連項目</h2> + +<ul> + <li>{{jsxref("Array.prototype.sort()")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">Warning: SyntaxError: 08 is not a legal ECMA-262 octal constant. +Warning: SyntaxError: 09 is not a legal ECMA-262 octal constant. +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a> でのみ、{{jsxref("SyntaxError")}} の警告が出ます。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>小数リテラルは、そのほかの十進数が続くゼロ(<code>0</code>)から開始できますが、先頭の <code>0</code> 以降の数値がすべて 8 以下の場合、数値は八進数として解釈されます。それゆえ、 <code>08</code> や <code>09</code> はあり得ないため、JavaScript はこれを警告します。</p> + +<p>八進数リテラルと八進数エスケープシーケンスは非推奨であり、追加の非推奨警告が発生することに注意してください。ECMAScript 6 以降では、小文字または大文字のラテンリテラル "O"(<code>0o</code> か <code>0O</code>)が続くゼロ始まりの構文が使用されます。詳細は、<a href="/ja/docs/Web/JavaScript/Reference/Lexical_grammar#Octal">lexical grammar</a> のページを見てください。</p> + +<h2 id="例">例</h2> + +<h3 id="無効な八進数">無効な八進数</h3> + +<pre class="brush: js example-bad">08; +09; +// SyntaxError: 08 is not a legal ECMA-262 octal constant +// SyntaxError: octal literals and octal escape sequences are deprecated</pre> + +<h3 id="有効な八進数">有効な八進数</h3> + +<p>"o" の文字が続くゼロを使用します。</p> + +<pre class="brush: js example-good">0O755; +0o644; +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Lexical_grammar#Octal">Lexical grammar</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">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) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("RangeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>{{jsxref("Number.prototype.toString()")}} メソッドで、オプションの <code>radix</code> パラメーターを使用しています。このパラメーターは、数値を表すために使用するナンバーシステムを指定する 2 から 36 の整数(数)でなければなりません。</p> + +<p>なぜ上限が 36 なのでしょうか?10 よりも大きい基数には、アルファベットが数値として用いられます。ラテンアルファベットは 26 文字しかないため、基数は 36 以上にはできません。</p> + +<p>一般的な基数として、以下のものを使用します:</p> + +<ul> + <li><a href="https://ja.wikipedia.org/wiki/%E4%BA%8C%E9%80%B2%E6%B3%95">二進法</a>のための 2、</li> + <li><a href="https://ja.wikipedia.org/wiki/%E5%85%AB%E9%80%B2%E6%B3%95">八進法</a>のための 8、</li> + <li><a href="https://ja.wikipedia.org/wiki/%E5%8D%81%E9%80%B2%E6%B3%95">十進法</a>のための 10、</li> + <li><a href="https://ja.wikipedia.org/wiki/%E5%8D%81%E5%85%AD%E9%80%B2%E6%B3%95">十六進法</a>のための 16。</li> +</ul> + +<h2 id="例">例</h2> + +<h3 id="無効なケース">無効なケース</h3> + +<pre class="brush: js example-bad">(42).toString(0); +(42).toString(1); +(42).toString(37); +(42).toString(150); +// フォーマットのために、このような文字列は使用できません: +(12071989).toString("MM-dd-yyyy"); +</pre> + +<h3 id="有効なケース">有効なケース</h3> + +<pre class="brush: js example-good">(42).toString(2); // "101010" (二進数) +(13).toString(8); // "15" (八進数) +(0x42).toString(10); // "66" (十進数) +(100000).toString(16) // "186a0" (十六進数) +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("Number.prototype.toString()")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: invalid regular expression flag "x" (Firefox) +SyntaxError: Invalid regular expression flags (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>コード内に、不正な正規表現フラグがあります。スラッシュで囲まれたパターンで構成される正規表現リテラルでは、フラグは 2 番目のフラグの後に定義されます。{{jsxref("RegExp")}} オブジェクトのコンストラクター関数 (2 つ目の引数)で定義することもできます。正規表現フラグは個別に使うこともできれば、好きな順序で複数使うこともできますが、ECMAScript では 5 つしかありません。</p> + +<p>規表現にフラグを含めるには、次の構文を使用します:</p> + +<pre class="brush: js">var re = /pattern/flags; +</pre> + +<p>または、</p> + +<pre class="brush: js">var re = new RegExp('pattern', 'flags');</pre> + +<table class="standard-table"> + <caption>正規表現フラグ</caption> + <thead> + <tr> + <th scope="col">フラグ</th> + <th scope="col">説明</th> + </tr> + </thead> + <tbody> + <tr> + <td><code>g</code></td> + <td>グローバルサーチ。</td> + </tr> + <tr> + <td>i</td> + <td>大文字小文字を区別したサーチ。</td> + </tr> + <tr> + <td>m</td> + <td>複数行サーチ</td> + </tr> + <tr> + <td>u</td> + <td>ユニコード; パターンを Unicode コードポイントシーケンスとして扱う。</td> + </tr> + <tr> + <td>y</td> + <td>対象の文字列の現在の位置から一致を探す "sticky" サーチ。{{jsxref("RegExp.sticky", "sticky")}} を見てください。</td> + </tr> + </tbody> +</table> + +<h2 id="例">例</h2> + +<p>有効な正規表現フラグは 5 つしかありません。</p> + +<pre class="brush: js example-bad">/foo/bar; + +// SyntaxError: invalid regular expression flag "b" +</pre> + +<p>正規表現を生成するつもりでしたか?2 つのスラッシュを含む式は正規表現リテラルとして解釈されます。</p> + +<pre class="brush: js example-bad">let obj = { + url: /docs/Web +}; + +// SyntaxError: invalid regular expression flag "W" +</pre> + +<p>または、文字列を生成するつもりでしたか?文字列リテラルを生成するためにはシングルコーテーション、またはダブルコーテーションを追記します。</p> + +<pre class="brush: js example-good">let obj = { + url: '/docs/Web' +};</pre> + +<h3 id="有効な正規表現フラグ">有効な正規表現フラグ</h3> + +<p>JavaScript で使用できる 5 つの正規表現フラグについては、上述の表を見てください。</p> + +<pre class="brush: js example-good">/foo/g; +/foo/gim; +/foo/uy; +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Guide/Regular_Expressions">正規表現</a></li> + <li><a href="http://xregexp.com/flags/">XRegEx flags</a> – regular expression library that provides four new flags (<code>n</code>, <code>s</code>, <code>x</code>, <code>A</code>)</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: return not in function +SyntaxError: yield not in function +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/return">return</a></code> ステートメントか <code><a href="/ja/docs/Web/JavaScript/Reference/Operators/yield">yield</a></code> ステートメントが、 <a href="/ja/docs/Web/JavaScript/Guide/Functions">関数</a> の外側で呼び出されました。どこかで、波括弧を忘れたのかもしれません。<code>return</code> ステートメントと <code>yield</code> ステートメントは、関数内で使用しなければなりません。なぜなら、これらのステートメントは、関数の実行を終了(または、停止や再開)し、関数の呼び出し元に返す値を指定するからです。</p> + +<h2 id="例">例</h2> + +<pre class="brush: js example-bad">var cheer = function(score) { + if (score === 147) + return "Maximum!"; + }; + if (score > 100) { + return "Century!"; + } +} + +// SyntaxError: return not in function</pre> + +<p>一見して、波括弧は正しく見えますが、このコードスニペットでは、最初の <code>if</code> ステートメントの後の <code>{</code> を忘れています。正しくは以下のようにします:</p> + +<pre class="brush: js example-good">var cheer = function(score) { + if (score === 147) { + return "Maximum!"; + } + if (score > 100) { + return "Century!"; + } +};</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/return">return</a></code></li> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Operators/yield">yield</a></code></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<p>JavaScript の例外 "called on incompatible target (or object)" は、関数が (与えられたオブジェクト上で) 呼び出されたときに、関数が期待する型に対応していない <code>this</code> を使用して呼び出された場合に発生します。</p> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox notranslate">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) +</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="What_went_wrong" name="What_went_wrong">原因</h2> + +<p>このエラーがスローされる場合、(指定されたオブジェクト上の) 関数が、関数が予期する型に対応していない <code>this</code> と共に呼び出されています。</p> + +<p>この問題は {{jsxref("Function.prototype.call()")}} メソッドか {{jsxref("Function.prototype.apply()")}} メソッドを使用して、予期していない型の <code>this</code> 引数を渡した場合に発生します。</p> + +<p>この問題は、オブジェクトのプロパティとして格納されている関数を他の関数の引数として提供する場合にも発生します。この場合、関数を格納しているオブジェクトは、他の関数から呼び出されたときに、その関数の <code>this</code> のターゲットにはなりません。この問題を回避するには、呼び出しを行っているラムダを提供するか、 {{jsxref("Function.prototype.bind()")}} 関数を使用して <code>this</code> 引数を期待されるオブジェクトに強制的に渡す必要があります。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Invalid_cases" name="Invalid_cases">無効な場合</h3> + +<pre class="brush: js example-bad notranslate">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. + +</pre> + +<h3 id="Valid_cases" name="Valid_cases">妥当な場合</h3> + +<pre class="brush: js example-good notranslate">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. + +</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Function.prototype.call()")}}</li> + <li>{{jsxref("Function.prototype.apply()")}}</li> + <li>{{jsxref("Function.prototype.bind()")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">ReferenceError: can't access lexical declaration `X' before initialization (Firefox) +ReferenceError: 'x' is not defined (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("ReferenceError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>初期化前に語彙変数にアクセスしました。これはブロックステートメント内で、定義される前に<code><a href="/ja/docs/Web/JavaScript/Reference/Statements/let">let</a></code> か <code><a href="/ja/docs/Web/JavaScript/Reference/Statements/const">const</a></code> 宣言にアクセスすると発生します。</p> + +<h2 id="例">例</h2> + +<h3 id="不正な場合">不正な場合</h3> + +<p>この場合、変数 "foo" はブロックステートメント内で <code>let</code> を使用して再宣言されています。</p> + +<pre class="brush: js example-bad">function test() { + let foo = 33; + if (true) { + let foo = (foo + 55); + // ReferenceError: can't access lexical + // declaration `foo' before initialization + } +} +test(); +</pre> + +<h3 id="有効な場合">有効な場合</h3> + +<p>"foo" を if ステートメント内に変更するには、再宣言の原因となる <code>let</code> を取り除きます。</p> + +<pre class="brush: js example-good">function test(){ + let foo = 33; + if (true) { + foo = (foo + 55); + } +} +test(); +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Statements/let#Temporal_dead_zone_と_let_に関するエラー">Temporal dead zone と let に関するエラー</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">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 +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>{{jsxref("undefined")}} か {{jsxref("null")}} に対してプロパティアクセスを行いました。</p> + +<h2 id="例">例</h2> + +<h3 id="無効なケース">無効なケース</h3> + +<pre class="brush: js example-bad">// 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 +</pre> + +<h3 id="問題解決">問題解決</h3> + +<p><code>undefined</code> か <code>null</code> の null pointer アクセスを修正するには、たとえば <a href="/ja/docs/Web/JavaScript/Reference/Operators/typeof">typeof</a> 演算子を使用できます。</p> + +<pre class="brush: js">if (typeof foo !== 'undefined') { + // Now we know that foo is defined, we are good to go. +}</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("undefined")}}</li> + <li>{{jsxref("null")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">TypeError: <code class="highlighted" id="line-87">can't assign to property "x" on {y}: not an object</code> (Firefox) +TypeError: Cannot create property 'x' on {y} (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}.</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>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")}}.</p> + +<p>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.</p> + +<h2 id="例">例</h2> + +<h3 id="無効なケース">無効なケース</h3> + +<pre class="brush: js example-bad">'use strict'; + +var foo = "my string"; +// The following line does nothing if not in strict mode. +foo.bar = {}; // <span class="message-body-wrapper"><span class="message-flex-body"><span class="devtools-monospace message-body">TypeError: can't assign to property "bar" on "my string": not an object</span></span></span> +</pre> + +<h3 id="問題を修正する">問題を修正する</h3> + +<p>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")}}.</p> + +<pre class="brush: js example-good">'use strict'; + +var foo = new String("my string"); +foo.bar = {}; +</pre> + +<h2 id="あわせて参照">あわせて参照</h2> + +<ul> + <li>{{jsxref("Strict_mode")}}</li> + <li>{{Glossary("primitive")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">TypeError: can't define property "x": "obj" is not extensible (Firefox) +TypeError: Cannot define property: "x", object is not extensible. (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>通常、オブジェクトは拡張可能で、新しいプロパティを追加できます。しかしこの場合は、{{jsxref("Object.preventExtensions()")}} がオブジェクトをもはや拡張できないものに設定しているため、拡張不可のマークが付けられたときにあったプロパティ以上のプロパティを追加できません。</p> + +<h2 id="例">例</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a>では、拡張不可のオブジェクトに新しいプロパティを追加しようとすると <code>TypeError</code> をスローします。非 strict モードでは、"x" プロパティの追加は暗黙的に無視されます。</p> + +<pre class="brush: js example-bad">'use strict'; + +var obj = {}; +Object.preventExtensions(obj); + +obj.x = 'foo'; +// TypeError: can't define property "x": "obj" is not extensible +</pre> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a>と非 strict モード共に、拡張不可のオブジェクトに新しいプロパティを追加しようとして {{jsxref("Object.defineProperty()")}} を呼び出すと、例外をスローします。</p> + +<pre class="brush: js example-bad">var obj = { }; +Object.preventExtensions(obj); + +Object.defineProperty(obj, + 'x', { value: "foo" } +); +// TypeError: can't define property "x": "obj" is not extensible +</pre> + +<p>このエラーを修正するには、{{jsxref("Object.preventExtensions()")}} の呼び出しを削除するか、オブジェクトが拡張不可とマークされる前にプロパティを追加するように移動する必要があります。もちろん、必要がないのであれば、追加しようとしているプロパティを削除しても良いです。</p> + +<pre class="brush: js example-good">'use strict'; + +var obj = {}; +obj.x = 'foo'; // add property first and only then prevent extensions + +Object.preventExtensions(obj);</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("Object.preventExtensions()")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">TypeError: property "x" is non-configurable and can't be deleted. (Firefox) +TypeError: Cannot delete property 'x' of #<Object> (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>strict モードでのみ、{{jsxref("TypeError")}} の警告が出ます。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>プロパティを削除しようとしましたが、プロパティが <a href="/ja/docs/Web/JavaScript/Data_structures#Properties">non-configurable</a> でした。<code>configurable</code> 属性は、オブジェクトからプロパティを削除できるかどうか、および(<code>writable</code> を除く)属性を変更できるかどうかを制御します。</p> + +<p>このエラーは、<a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">strict モードのコード</a> でのみ発生します。非 strict コードでは、この操作は <code>false</code> を返します。</p> + +<h2 id="例">例</h2> + +<p>non-configurable プロパティは、さほど一般的ではありませんが、{{jsxref("Object.defineProperty()")}} か {{jsxref("Object.freeze()")}} を使用して生成できます。</p> + +<pre class="brush: js example-bad">"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 +</pre> + +<p>JavaScript に組み込まれた、少数の non-configurable プロパティもあります。もしかしたら、Math の定数を削除しようとしたのかもしれません。</p> + +<pre class="brush: js example-bad">"use strict"; +delete Math.PI; // TypeError</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Operators/delete">delete</a></li> + <li>{{jsxref("Object.defineProperty()")}}</li> + <li>{{jsxref("Object.freeze()")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">TypeError: can't redefine non-configurable property "x" (Firefox) +TypeError: Cannot redefine property: "x" (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>プロパティを再定義しようとしましたが、そのプロパティは<a href="/ja/docs/Web/JavaScript/Data_structures#Properties">設定不可</a>です。<code>configurable</code> 属性は、プロパティをオブジェクトから削除できるかどうか、および (<code>writable</code> 以外で) 変更できるかどうかを制御します。通常、<a href="/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer">オブジェクト初期化子</a>で生成されたオブジェクトのプロパティは、変更可能です。しかし、{{jsxref("Object.defineProperty()")}} を使用した場合などは、既定でプロパティを修正できません。</p> + +<h2 id="例">例</h2> + +<h3 id="Object.defineProperty_で生成された設定不可のプロパティ"><code>Object.defineProperty</code> で生成された設定不可のプロパティ</h3> + +<p>設定可能にしたくない場合、{{jsxref("Object.defineProperty()")}} は設定不可のプロパティを生成します。</p> + +<pre class="brush: js example-bad">var obj = Object.create({}); +Object.defineProperty(obj, "foo", {value: "bar"}); + +Object.defineProperty(obj, "foo", {value: "baz"}); +// TypeError: can't redefine non-configurable property "foo" +</pre> + +<p>後のコードで再定義するためには、"foo" プロパティを設定可能にする必要があります。</p> + +<pre class="brush: js example-good">var obj = Object.create({}); +Object.defineProperty(obj, "foo", {value: "bar", configurable: true}); +Object.defineProperty(obj, "foo", {value: "baz", configurable: true});</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Data_structures#Properties">[[Configurable]]</a></li> + <li>{{jsxref("Object.defineProperty()")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<p>JavaScript の例外 "cyclic object value" は、 <a href="https://www.json.org/">JSON</a> の中にオブジェクトの参照が見つかったときに発生します。 {{jsxref("JSON.stringify()")}} はこれを解決しようとせず、これによって失敗します。</p> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox notranslate">TypeError: cyclic object value (Firefox) +TypeError: Converting circular structure to JSON (Chrome and Opera) +TypeError: Circular reference in value argument not supported (Edge) +</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="What_went_wrong" name="What_went_wrong">エラーの原因</h2> + +<p><a href="https://www.json.org/">JSON 形式</a>はオブジェクト参照に対応していません (<a href="http://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03">IETF の草案はありますが</a>)。したがって {{jsxref("JSON.stringify()")}} はこれを解決しようとせず、これによって失敗します。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Circular_references" name="Circular_references">循環参照</h3> + +<p>次のような循環構造体では、</p> + +<pre class="brush: js notranslate">var circularReference = {otherData: 123}; +circularReference.myself = circularReference; +</pre> + +<p>{{jsxref("JSON.stringify()")}} は失敗します。</p> + +<pre class="brush: js example-bad notranslate">JSON.stringify(circularReference); +// TypeError: cyclic object value +</pre> + +<p>循環参照をシリアライズするには、それに対応したライブラリ (例えば <a href="https://github.com/douglascrockford/JSON-js/blob/master/cycle.js">cycle.js</a>) を使用したり、自分自身で循環参照を探してシリアライズ可能な値に置き換える (または削除する) ことを求める解決策を実装することもできます。</p> + +<p>次のスニペットは、 {{jsxref("JSON.stringify()")}} の <code>replacer</code> 引数を使用して循環参照を検索してフィルタリングする方法を示しています (これによりデータ損失が発生します)。</p> + +<pre class="brush: js notranslate">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} +</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("JSON.stringify")}}</li> + <li><a href="https://github.com/douglascrockford/JSON-js/blob/master/cycle.js">cycle.js</a> – <code>JSON.decycle</code> と <code> JSON.retrocycle</code> という 2 つの関数を導入し、循環構造と dag を JSON でエンコードしてからリカバリーできます。</li> +</ul> 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 +--- +<div>{{JSSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">TypeError: can't access dead object +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>メモリ使用の向上とメモリリーク防止のため、Firefox はアドオンに対して、親ドキュメントが破棄された後に DOM オブジェクトへ強い参照を保持することをできなくしています。死んだオブジェクトは、DOM で棄された後にもかかわらず、存続する DOM 要素への強い参照を保持しています。この問題を回避するために、外部ドキュメント内の DOM ノードへの参照を、そのドキュメントに固有のオブジェクトに格納し、ドキュメントがアンロードされるときにクリーンアップするか、または<a href="/ja/docs/Mozilla/Tech/XPCOM/Language_Bindings/Components.utils.getWeakReference">弱い参照</a>にするべきです。</p> + +<h2 id="オブジェクトが破棄されているか確認する">オブジェクトが破棄されているか確認する</h2> + +<p><a href="/ja/docs/Mozilla/Tech/XPCOM/Language_Bindings/Components.utils">Components.utils</a> は特権コードで使用できる <code>isDeadWrapper()</code> メソッドを提供しています。</p> + +<pre class="brush: js">if (Components.utils.isDeadWrapper(window)) { + // dead +}</pre> + +<p>非特権コードは Component.utils にアクセスできないため、例外をキャッチするしかありません。</p> + +<pre class="brush: js">try { + String(window); +} +catch (e) { + console.log("window is likely dead"); +}</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="https://blog.mozilla.org/addons/2012/09/12/what-does-cant-access-dead-object-mean/">What does “can’t access dead object” mean?</a></li> + <li><a href="/ja/docs/Extensions/Common_causes_of_memory_leaks_in_extensions">Common causes of memory leaks in extensions</a></li> + <li><a href="/ja/docs/Mozilla/Tech/XPCOM/Language_Bindings/Components.utils">Components.utils</a></li> + <li><a href="/ja/docs/Mozilla/Zombie_compartments">Zombie Compartments</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: applying the 'delete' operator to an unqualified name is deprecated (Firefox) +SyntaxError: Delete of an unqualified identifier in strict mode. (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a> でのみ {{jsxref("SyntaxError")}}。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>JavaScript では、通常の変数を <code><a href="/ja/docs/Web/JavaScript/Reference/Operators/delete">delete</a></code> 演算子で削除できません。strict モードで、変数を削除しようとするとエラーがスローされ、削除できません。</p> + +<p><code>delete</code> 演算子は、オブジェクトのプロパティのみ削除できます。オブジェクトプロパティは、設定可能な場合は "修飾" されます。</p> + +<p>一般的に信じられていることと異なり、<code>delete</code> 演算子は直接的なメモリーを開放とは<strong>関係ありません</strong>。メモリー管理は、参照の開放によって間接的に行われます。<a href="/ja/docs/Web/JavaScript/Memory_Management">memory management</a> ページと <code><a href="/ja/docs/Web/JavaScript/Reference/Operators/delete">delete</a></code> 演算子ページで詳細を確認してください。</p> + +<p>このエラーは、<a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict mode モード</a>でのみ発生します。非 strict モードでは、演算子はただ <code>false</code> を返します。</p> + +<h2 id="例">例</h2> + +<p>プレーンな変数を削除しようとすると、JavaScript では動作せず、strict モードだとエラーをスローします:</p> + +<pre class="brush: js example-bad">'use strict'; + +var x; + +// ... + +delete x; + +// SyntaxError: applying the 'delete' operator to an unqualified name +// is deprecated +</pre> + +<p>変数のコンテンツを開放するには、{{jsxref("null")}} を設定します:</p> + +<pre class="brush: js example-good">'use strict'; + +var x; + +// ... + +x = null; + +// x can be garbage collected +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Operators/delete">delete</a></code></li> + <li><a href="/ja/docs/Web/JavaScript/Memory_Management">Memory management</a></li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Errors/Cant_delete">TypeError: property "x" is non-configurable and can't be deleted</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">Warning: ReferenceError: deprecated caller usage (Firefox) +Warning: ReferenceError: deprecated arguments usage (Firefox) +TypeError: 'callee' and 'caller' cannot be accessed in strict mode. (Safari) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>strict モードでのみ、{{jsxref("ReferenceError")}} の警告が発生します。JavaScript の実行は、停止しません。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a> で、{{jsxref("Function.caller")}} か {{jsxref("Function.arguments")}} が使われていますが、それらは使用すべきではありません。なぜならば、それらは関数の呼び出し元をリークし、非標準で、最適化が困難、かつ性能に対して有害な機能のため、非推奨です。</p> + +<h2 id="例">例</h2> + +<h3 id="非推奨の_function.caller_か_arguments.callee.caller">非推奨の <code>function.caller</code> か <code>arguments.callee.caller</code></h3> + +<p>{{jsxref("Function.caller")}} と <code><a href="/ja/docs/Web/JavaScript/Reference/Functions/arguments/callee">arguments.callee.caller</a></code> は非推奨です(詳細は参照記事を見てください)。</p> + +<pre class="brush: js example-bad">"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!"</pre> + +<h3 id="Function.arguments"><code>Function.arguments</code></h3> + +<p>{{jsxref("Function.arguments")}} は非推奨です(詳細は参照記事を見てください)。</p> + +<pre class="brush: js example-bad">"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 +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features">非推奨の機能、廃止された機能</a></li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">Strict モード</a></li> + <li>{{jsxref("Function.arguments")}}</li> + <li>{{jsxref("Function.caller")}} と <code><a href="/ja/docs/Web/JavaScript/Reference/Functions/arguments/callee">arguments.callee.caller</a></code></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<p>JavaScript の警告 "expression closures are deprecated" は、標準外の<a href="/ja/docs/Web/JavaScript/Reference/Operators/Expression_closures">式クロージャ</a>構文 (略記関数構文) が使用されたときに発生します。</p> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox">Warning: expression closures are deprecated +</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>警告。 JavaScript の実行は中断されません。</p> + +<h2 id="What_went_wrong" name="What_went_wrong">原因</h2> + +<p>標準外の<a href="/ja/docs/Web/JavaScript/Reference/Operators/Expression_closures">式クロージャ</a>構文 (略記関数構文) は非推奨のため、使用すべきではありません。この構文は <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1083458">bug 1083458</a> で削除予定であり、削除された後は {{jsxref("SyntaxError")}} が発生します。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Deprecated_syntax" name="Deprecated_syntax">非推奨の構文</h3> + +<p>式クロージャで、中括弧を省略したり、関数宣言やメソッド定義で return 文を省略したりすることです。</p> + +<pre class="brush: js example-bad">var x = function() 1; + +var obj = { + count: function() 1 +}; +</pre> + +<h3 id="Standard_syntax" name="Standard_syntax">標準の構文</h3> + +<p>標準外の式クロージャ構文から標準の ECMAScript 構文に変換するためには、波括弧と return ステートメントを追加します。</p> + +<pre class="brush: js example-good">var x = function() { return 1; } + +var obj = { + count: function() { return 1; } +}; +</pre> + +<h3 id="Standard_syntax_using_arrow_functions" name="Standard_syntax_using_arrow_functions">アロー関数を使用した標準の構文</h3> + +<p>代わりに<a href="/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions">アロー関数</a>を使用することもできます。</p> + +<pre class="brush: js example-good">var x = () => 1;</pre> + +<h3 id="Standard_syntax_using_shorthand_method_syntax" name="Standard_syntax_using_shorthand_method_syntax">略記メソッド構文を使用した標準構文</h3> + +<p>次のように、式クロージャがゲッターとセッターにも見られることがあります。</p> + +<pre class="brush: js example-bad">var obj = { + get x() 1, + set x(v) this.v = v +}; +</pre> + +<p>ES2015 の<a href="/ja/docs/Web/JavaScript/Reference/Functions/Method_definitions">メソッド定義</a>で、次のように変換することができます。</p> + +<pre class="brush: js example-good">var obj = { + get x() { return 1 }, + set x(v) { this.v = v } +}; +</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Operators/Expression_closures">式クロージャ</a></li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions">アロー関数</a></li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Functions/Method_definitions">メソッド定義</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: +"0"-prefixed octal literals and octal escape sequences are deprecated; +for octal literals use the \"0o\" prefix instead +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a>でのみ {{jsxref("SyntaxError")}}。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>8 進文字と 8 進エスケープシーケンスは非推奨で、strict モードでは {{jsxref("SyntaxError")}} をスローします。ECMAScript 2015 以降では、標準文法として 0 から始まり大文字、または小文字のラテン文字 "O" (<code>0o</code> or <code>0O)</code> が続く文法を使用します。</p> + +<h2 id="例">例</h2> + +<h3 id="0_接頭辞付きの_8_進文字">"0" 接頭辞付きの 8 進文字</h3> + +<pre class="brush: js example-bad">"use strict"; + +03; + +// SyntaxError: "0"-prefixed octal literals and octal escape sequences +// are deprecated</pre> + +<h3 id="8_進エスケープシーケンス">8 進エスケープシーケンス</h3> + +<pre class="brush: js example-bad">"use strict"; + +"\251"; + +// SyntaxError: "0"-prefixed octal literals and octal escape sequences +// are deprecated +</pre> + +<h3 id="有効な_8_進数">有効な 8 進数</h3> + +<p>0 に "o" か "O" が続くものを使用します:</p> + +<pre class="brush: js example-good">0o3; +</pre> + +<p>8 進エスケープシーケンスの代わりに、16 進エスケープシーケンスを使用できます:</p> + +<pre class="brush: js example-good">'\xA9';</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Lexical_grammar#Octal">字句文法</a></li> + <li> + <p><a href="/en-US/docs/Web/JavaScript/Reference/Errors/Bad_octal">Warning: 08/09 is not a legal ECMA-262 octal constant</a></p> + </li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<p>JavaScript の警告 "Using <code>//@</code> to indicate sourceURL pragmas is deprecated. Use <code>//#</code> instead" は、 JavaScript の非推奨のソースマップ構文があったときに発生します。</p> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox notranslate">Warning: SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead + +Warning: SyntaxError: Using //@ to indicate sourceMappingURL pragmas is deprecated. Use //# instead +</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>{{jsxref("SyntaxError")}} が発生したという警告です。 JavaScript の実行は停止しません。</p> + +<h2 id="What_went_wrong" name="What_went_wrong">エラーの原因</h2> + +<p>JavaScript のソースに非推奨のソースマップ構文があることです。</p> + +<p>通常 JavaScript ソースは、サーバーからの提供を効率化するために、結合と最小化が行われます。<a href="http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/">ソースマップ</a>があると、デバッガーが実行中のコードを元のソースファイルに対応付けすることができます。</p> + +<p>IE の JScript エンジンは、<code>//@cc_on</code> の後でページが見つかると、条件付きコンパイルの有効化とみなします。 この IE での競合のために、ソースマップの仕様の構文が変更されました。IE の <a href="https://msdn.microsoft.com/ja/library/8ka90k2e%28v=vs.94%29.aspx">@cc_on 文</a> はあまり知られていない機能ですが、<a href="https://bugs.jquery.com/ticket/13274">jQuery</a> やそのほかのライブラリのソースマップを破壊します。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Deprecated_syntax" name="Deprecated_syntax">非推奨の構文</h3> + +<p>"@" 記号による構文は非推奨です。</p> + +<pre class="brush: js example-bad notranslate">//@ sourceMappingURL=http://example.com/path/to/your/sourcemap.map +</pre> + +<h3 id="Standard_syntax" name="Standard_syntax">標準の構文</h3> + +<p>代わりに "#" 記号を使用してください。</p> + +<pre class="brush: js example-good notranslate">//# sourceMappingURL=http://example.com/path/to/your/sourcemap.map</pre> + +<p>あるいは、JavaScript ファイルに {{HTTPHeader("SourceMap")}} ヘッダーを設定して、コメントを全く表示しないようにすることもできます。</p> + +<pre class="brush: js example-good notranslate">SourceMap: /path/to/file.js.map</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/Tools/Debugger/How_to/Use_a_source_map">ソースマップの使用 – Firefox ツールドキュメント</a></li> + <li><a href="http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/">Introduction to source maps – HTML5 rocks</a></li> + <li>{{HTTPHeader("SourceMap")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<p>JavaScript の警告で、 Firefox 68 以前で使用されていた String ジェネリックに関するものです。 String ジェネリックは Firefox 68 から削除されました。</p> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox">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 +</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>警告。 JavaScript の実行は中断されません。</p> + +<h2 id="What_went_wrong" name="What_went_wrong">原因</h2> + +<p>標準外のジェネリック {{jsxref("String")}} のメソッドは非推奨であり、 Firefox 68 で削除されました。 String ジェネリックは、 <code>String</code> インスタンスメソッドを <code>String</code> オブジェクトに提供し、 <code>String</code> の「メソッドを任意のオブジェクトに適用できるようにします。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Deprecated_syntax" name="Deprecated_syntax">非推奨の構文</h3> + +<pre class="brush: js example-bad">var num = 15; +String.replace(num, /5/, '2');</pre> + +<h3 id="Standard_syntax" name="Standard_syntax">標準の構文</h3> + +<pre class="brush: js example-good">var num = 15; +String(num).replace(/5/, '2'); +</pre> + +<h2 id="Shim">Shim</h2> + +<p>対応していないブラウザーで対応できるようにするための Shim です。</p> + +<pre class="brush: js">/*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]); + } +}());</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("String")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox">Warning: Date.prototype.toLocaleFormat is deprecated; consider using Intl.DateTimeFormat instead +</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>警告。 JavaScript の実行は停止しません。</p> + +<h2 id="What_went_wrong" name="What_went_wrong">エラーの原因</h2> + +<p>非標準の {{jsxref("Date.prototype.toLocaleFormat")}} メソッドは非推奨のため、使用すべきではありません。これは C 言語の <code>strftime()</code> 関数が期待するものと同じフォーマットの文字列を使用します。<strong>この関数は Firefox 58 以降ではもう利用できません。</strong></p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Deprecated_syntax" name="Deprecated_syntax">非推奨の構文</h3> + +<p>{{jsxref("Date.prototype.toLocaleFormat")}} メソッドは非推奨で、削除される予定です (クロスブラウザーの対応はなく、 Firefox でのみ使用できます)。</p> + +<pre class="brush: js example-bad">var today = new Date(); +var date = today.toLocaleFormat('%A, %e. %B %Y'); + +console.log(date); +// In German locale +// "Freitag, 10. März 2017"</pre> + +<h3 id="ECMAScript_Intl_API_を使用した代わりの標準構文">ECMAScript Intl API を使用した代わりの標準構文</h3> + +<p>ECMA-402 (ECMAScript Intl API) 標準では、言語に敏感な日付と時刻の書式設定を可能にする標準的なオブジェクトとメソッドを指定しています (Chrome 24+、Firefox 29+、IE11+、Safari10+ で使用できます)。</p> + +<p>ある日付のフォーマットを指定する場合、{{jsxref("Date.prototype.toLocaleDateString")}} メソッドを使用すべきです。</p> + +<pre class="brush: js example-good">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" +</pre> + +<p>または、{{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}} オブジェクトを使用できます。これにより、ほとんど計算が完了したオブジェクトをキャッシュして、書式設定が高速になります。これは、日付のフォーマットを繰り返すときに役立ちます。</p> + +<pre class="brush: js example-good">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" +</pre> + +<h3 id="Alternative_standard_syntax_using_Date_methods" name="Alternative_standard_syntax_using_Date_methods">Date メソッドを使用した代わりの標準構文</h3> + +<p>{{jsxref("Date")}} オブジェクトは、カスタム日付文字列を構築するいくつかのメソッドを提供しています。</p> + +<pre class="brush: js example-bad">(new Date()).toLocaleFormat("%Y%m%d"); +// "20170310" +</pre> + +<p>以下のように変換できます。</p> + +<pre class="brush: js example-good">let now = new Date(); +let date = now.getFullYear() * 10000 + + (now.getMonth() + 1) * 100 + now.getDate(); + +console.log(date); +// "20170310"</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Date.prototype.toLocaleFormat")}}</li> + <li>{{jsxref("Date.prototype.toLocaleDateString")}}</li> + <li>{{jsxref("DateTimeFormat", "Intl.DateTimeFormat")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">Warning: SyntaxError: test for equality (==) mistyped as assignment (=)? +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a> でのみ、{{jsxref("SyntaxError")}} の警告が出ます。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>通常、等価テスト(<code>==</code>)が予想されるところで、代入 (<code>=</code>)が行われています。デバッグを行いやすくするために、(厳密な警告が可能になっている)JavaScript は、このパターンについて警告を出します。</p> + +<h2 id="例">例</h2> + +<h3 id="条件式内での代入">条件式内での代入</h3> + +<p>(<code><a href="/ja/docs/Web/JavaScript/Reference/Statements/if...else">if...else</a></code> のような)条件式内で、ダン純名代入を行わないことをお勧めします。なぜならば、コードを一目見たときに、代入は等価と混同しやすいからです。たとえば、次のコードは使用しないでください:</p> + +<pre class="brush: js example-bad">if (x = y) { + // 正しいことを実行する。 +} +</pre> + +<p>条件式内で代入をする必要がある場合、一般t京奈方法は代入の周りに追加の括弧を置くことです。たとえば:</p> + +<pre class="brush: js">if ((x = y)) { + // 正しいことを実行する。 +}</pre> + +<p>または、, 比較演算(たとえば、<code>==</code> や <code>===</code>)を使用したいのかもしれません:</p> + +<pre class="brush: js">if (x == y) { + // 正しいことを実行する。 +}</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">Strict モード</a></li> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/if...else">if...else</a></code></li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">比較演算子</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">Warning: JavaScript 1.6's for-each-in loops are deprecated; consider using ES6 for-of instead +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>警告</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>JavaScript 1.6 の {{jsxref("Statements/for_each...in", "for each (variable in obj)")}} ステートメントは非推奨で、近い将来削除される予定です。</p> + +<h2 id="例">例</h2> + +<h3 id="オブジェクトの反復">オブジェクトの反復</h3> + +<p>特定のオブジェクトの値を反復するために、{{jsxref("Statements/for_each...in", "for each...in")}} が使用されています。</p> + +<h4 id="非推奨の構文">非推奨の構文</h4> + +<pre class="brush: js example-bad">var object = { a: 10, b: 20 }; + +for each (var x in object) { + console.log(x); // 10 + // 20 +} +</pre> + +<h4 id="代わりの標準構文">代わりの標準構文</h4> + +<p>指定したオブジェクトのキーを反復して、ループ内のそれぞれの値を取得するために、標準の {{jsxref("Statements/for...in", "for...in")}} ループを使用できます:</p> + +<pre class="brush: js example-good">var object = { a: 10, b: 20 }; + +for (var key in object) { + var x = object[key]; + console.log(x); // 10 + // 20 +} +</pre> + +<p>または、{jsxref("Statements/for...of", "for...of")}}(ES2015)と {{jsxref("Object.values")}}(ES2017)を使用して、特定のオブジェクトの配列値を取得して、次のように反復処理できます:</p> + +<pre class="brush: js example-good">var object = { a: 10, b: 20 }; + +for (var x of Object.values(object)) { + console.log(x); // 10 + // 20 +} +</pre> + +<h3 id="配列の反復">配列の反復</h3> + +<p>{{jsxref("Statements/for_each...in", "for each...in")}} は、特定の配列要素を反復するために使用されていました。</p> + +<h4 id="非推奨の構文_2">非推奨の構文</h4> + +<pre class="brush: js example-bad">var array = [10, 20, 30]; + +for each (var x in array) { + console.log(x); // 10 + // 20 + // 30 +} +</pre> + +<h4 id="代わりの標準構文_2">代わりの標準構文</h4> + +<p>{{jsxref("Statements/for...of", "for...of")}}(ES2015)で同様のループができます。</p> + +<pre class="brush: js example-good">var array = [10, 20, 30]; + +for (var x of array) { + console.log(x); // 10 + // 20 + // 30 +} +</pre> + +<h3 id="null_の可能性がある配列の反復">null の可能性がある配列の反復</h3> + +<p>指定した値が <code>null</code> か <code>undefined</code> だった場合、 {{jsxref("Statements/for_each...in", "for each...in")}} は何もしませんが、{{jsxref("Statements/for...of", "for...of")}} は例外をスローします。</p> + +<h4 id="非推奨の構文_3">非推奨の構文</h4> + +<pre class="brush: js example-bad">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 +</pre> + +<h4 id="代わりの標準構文_3">代わりの標準構文</h4> + +<p>{{jsxref("Statements/for_each...in", "for each...in")}} ステートメントを書き換えて、{{jsxref("Statements/for...of", "for...of")}} でも <code>null</code> か <code>undefined</code> を扱えるようにするには、{{jsxref("Statements/for...of", "for...of")}} の周囲をガードする必要があります。</p> + +<pre class="brush: js example-good">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 +</pre> + +<h3 id="オブジェクトのキーバリューペアを反復する">オブジェクトのキー/バリューペアを反復する</h3> + +<h4 id="非推奨の構文_4">非推奨の構文</h4> + +<p>{{jsxref("Statements/for_each...in", "for each...in")}} と非推奨の {{jsxref("Iterator")}} オブジェクトを使用した、特定のオブジェクトのキー/バリューペアを反復する非推奨の語彙があります。</p> + +<pre class="brush: js example-bad">var object = { a: 10, b: 20 }; + +for each (var [key, value] in Iterator(object)) { + console.log(key, value); // "a", 10 + // "b", 20 +} +</pre> + +<h4 id="代わりの標準構文_4">代わりの標準構文</h4> + +<p>指定したオブジェクトのキーを反復して、ループ内のそれぞれの値を取得するために、標準の {{jsxref("Statements/for...in", "for...in")}} ループを使用できます:</p> + +<pre class="brush: js example-good">var object = { a: 10, b: 20 }; + +for (var key in object) { + var value = object[key]; + console.log(key, value); // "a", 10 + // "b", 20 +} +</pre> + +<p>または、{jsxref("Statements/for...of", "for...of")}}(ES2015)と {{jsxref("Object.values")}}(ES2017)を使用して、特定のオブジェクトの配列値を取得して、次のように反復処理できます:</p> + +<pre class="brush: js example-good">var object = { a: 10, b: 20 }; + +for (var [key, value] of Object.entries(object)) { + console.log(key, value); // "a", 10 + // "b", 20 +} +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("Statements/for...of", "for...of")}}</li> + <li>{{jsxref("Object.values")}}</li> + <li>{{jsxref("Object.entries")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">TypeError: setting getter-only property "x" (Firefox) +TypeError: Cannot set property "prop" of #<Object> which has only a getter (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a>でのみ、{{jsxref("TypeError")}}。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Functions/get">getter</a> しか指定されていないプロパティに、新しい値を設定しようとしています。非 strict モードでは暗黙裡に無視されるだけですが、<a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a>では {{jsxref("TypeError")}} がスローされます。</p> + +<h2 id="例">例</h2> + +<p>下記の例では、プロパティの getter の設定方法を示しています。<a href="/ja/docs/Web/JavaScript/Reference/Functions/set">setter</a> は指定していないため、<code>temperature</code> プロパティに <code>30</code> をセットしようとすると、<code>TypeError</code> がスローされます。詳細は {{jsxref("Object.defineProperty()")}} ページを見てください。</p> + +<pre class="brush: js example-bad">"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"</pre> + +<p>このエラーを修正するには、temperature プロパティに値を設定しようとしている 16 行目を取り除くか、次のように <a href="/ja/docs/Web/JavaScript/Reference/Functions/set">setter</a> を実装します:</p> + +<pre class="brush: js example-good highlight[12]">"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 }]</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("Object.defineProperty()")}}</li> + <li>{{jsxref("Object.defineProperties()")}}</li> +</ul> 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 +--- +<div>{{JSSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: identifier starts immediately after numeric literal (Firefox) +SyntaxError: Unexpected number (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>{{Glossary("Identifier", "identifiers")}} と呼ばれる変数名は特定のルールに従う必要があり、それに反しています!</p> + +<p>JavaScript の識別子は文字かアンダースコア (_)、ドル記号 ($) で始まる必要があります。数値からは始められません! 2 文字目以降でのみ、数値 (0-9) を使用できます。</p> + +<h2 id="例">例</h2> + +<h3 id="数値文字から始まる変数名">数値文字から始まる変数名</h3> + +<p>JavaScript は変数名を数値から始めることはできません。次は失敗です:</p> + +<pre class="brush: js example-bad">var 1life = 'foo'; +// SyntaxError: identifier starts immediately after numeric literal + +var foo = 1life; +// SyntaxError: identifier starts immediately after numeric literal +</pre> + +<p>数値始まりにならないように、変数名を変更する必要があります。</p> + +<pre class="brush: js example-good">var life1 = 'foo'; +var foo = life1; +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Lexical_grammar">字句文法</a></li> + <li><a href="/ja/docs/Web/JavaScript/Guide">JavaScript ガイド</a>の<a href="/ja/docs/Web/JavaScript/Guide/Grammar_and_types#Variables">変数</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: illegal character (Firefox) +SyntaxError: Invalid or unexpected token (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>コードのこの位置に属していない無効なトークンまたは予期しないトークンがあります。シンタックスハイライトをサポートしているエディターを使用して、マイナス記号 (<code> - </code>) とダッシュ (<code> – </code>) や、クオート (<code> " </code>) と非標準のクオーテーション記号 (<code> “ </code>) のようなミスがないか、コードを注意深くチェックしてください。</p> + +<h2 id="例">例</h2> + +<h3 id="文字のミスマッチ">文字のミスマッチ</h3> + +<p>いくつかの文字は似たように見えますが、パーサーがコードを解釈できなくなります。</p> + +<pre class="brush: js example-bad">“This looks like a string”; +// SyntaxError: illegal character + +42 – 13; +// SyntaxError: illegal character +</pre> + +<p>これは動作します:</p> + +<pre class="brush: js example-good">"This is actually a string"; + +42 - 13; +</pre> + +<h3 id="文字の付け忘れ">文字の付け忘れ</h3> + +<p>さまざまな個所で、文字を付け忘れやすいです。</p> + +<pre class="brush: js example-bad">var colors = ['#000', #333', '#666']; +// SyntaxError: illegal character +</pre> + +<p><code><strong>'</strong>#333'</code> に付け忘れたクオートを追加します。</p> + +<pre class="brush: js example-good">var colors = ['#000', '#333', '#666'];</pre> + +<h3 id="隠れた文字">隠れた文字</h3> + +<p>外部のソースをコピー & ペーストすると、不正な文字が含まれていることがあります。気を付けて!</p> + +<pre class="brush: js example-bad">var foo = 'bar'; +// SyntaxError: illegal character +</pre> + +<p>Vim のようなエディターでこのコードを調査すると、実際には <a href="https://en.wikipedia.org/wiki/Zero-width_space">zero-width space (ZWSP) (U+200B)</a> 文字があることが分かります。</p> + +<pre class="brush: js">var foo = 'bar';<200b></pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Lexical_grammar">字句文法</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<p>JavaScript の例外 "right-hand side of 'in' should be an object" は、 <a href="/en-US/docs/Web/JavaScript/Reference/Operators/in"><code>in</code> 演算子</a>が文字列、数値、その他のプリミティブ型の中を検索するために使用された場合に発生します。これは、あるプロパティがオブジェクト内にあることをチェックする用途でしか使用することができません。</p> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox notranslate">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) +</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="What_went_wrong" name="What_went_wrong">原因</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Operators/in"><code>in</code> 演算子</a>はあるプロパティがオブジェクト内にあることをチェックする用途でしか使用することができません。文字列、数値、その他のプリミティブ型の中を検索することはできません。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Searching_in_strings" name="Searching_in_strings">文字列内の検索</h3> + +<p>他のプログラミング言語 (Python など) とは異なり、 <a href="/ja/docs/Web/JavaScript/Reference/Operators/in"><code>in</code> 演算子</a>を使用して文字列の中を検索することはできません。</p> + +<pre class="brush: js example-bad notranslate">"Hello" in "Hello World"; +// TypeError: cannot use 'in' operator to search for 'Hello' in 'Hello World'</pre> + +<p>Instead you will need to use {{jsxref("String.prototype.indexOf()")}}, for example.</p> + +<pre class="brush: js example-good notranslate">"Hello World".indexOf("Hello") !== -1; +// true</pre> + +<h3 id="The_operand_cant_be_null_or_undefined" name="The_operand_cant_be_null_or_undefined">オペランドを null や undefined にすることはできない</h3> + +<p>調査対象のオブジェクトが実際に {{jsxref("null")}} や {{jsxref("undefined")}} になっていないことを確認してください。</p> + +<pre class="brush: js example-bad notranslate">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) +</pre> + +<p><code>in</code> 演算子は常にオブジェクトを期待します。</p> + +<pre class="brush: js example-good notranslate">var foo = { baz: "bar" }; +"bar" in foo; // false + +"PI" in Math; // true +"pi" in Math; // false +</pre> + +<h3 id="Searching_in_arrays" name="Searching_in_arrays">配列の中の検索</h3> + +<p><code>in</code> 演算子を使用して {{jsxref("Array")}} オブジェクトの中を検索するときは注意してください。 <code>in</code> 演算子は添字の数値をチェックするのであり、その位置の値をチェックするのではありません。</p> + +<pre class="brush: js notranslate">var trees = ['redwood', 'bay', 'cedar', 'oak', 'maple']; +3 in trees; // true +"oak" in trees; // false</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/jas/docs/Web/JavaScript/Reference/Operators/in"><code>in</code> 演算子</a></li> +</ul> 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 +--- +<p>{{jsSidebar("Errors")}}</p> + +<p>以下に、 JavaScript で発生するエラーのリストがあります。これらのエラーはデバッグを大いに助けてくれますが、報告される問題がいつも直ちに明快とは限りません。以下のページでは、これらのエラーについて詳しく説明します。どのエラーも {{jsxref("Error")}} オブジェクトを基礎としたオブジェクトであり、<code>name</code> と <code>message</code> を有しています。</p> + +<p>ウェブコンソールに表示されたエラーには、コードにある問題を速やかに理解するのに役立つ、関連ページへのリンクが含まれていることがあります。</p> + +<p>JavaScript のエラーを修正するための初心者向け導入用チュートリアルについては、<a href="/ja/docs/Learn/JavaScript/First_steps/What_went_wrong">何が間違っている? JavaScript のトラブルシューティング</a>を参照してください。</p> + +<h2 id="List_of_errors" name="List_of_errors">エラーのリスト</h2> + +<p>このリストでは、各ページが名前 (エラーの種別) とメッセージ (より詳細で読解可能なエラーメッセージ) によってリストアップされています。これら 2 つのプロパティが、エラーの理解と解決の出発点となります。詳細は、以下のリンクを参照してください!</p> + +<p>{{ListSubPages("/ja/docs/Web/JavaScript/Reference/Errors")}}</p> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">RangeError: invalid array length (Firefox) +RangeError: Invalid array length (Chrome) +RangeError: Invalid array buffer length (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("RangeError")}}</p> + +<h2 id="何が悪かったの">何が悪かったの?</h2> + +<p>以下のいずれかです:</p> + +<ul> + <li>負数や 2<sup>32</sup> 以上の値の数を {{jsxref("Array")}} や {{jsxref("ArrayBuffer")}} に設定した。</li> + <li>{{jsxref("Array.length")}} プロパティを負数や 2<sup>32</sup> 以上の値の数に設定した。</li> +</ul> + +<p>なぜ <code>Array</code> と <code>ArrayBuffer</code> の length が制限されるのでしょうか?<code>配列</code>と <code>ArrayBuffer</code> の <code>length</code> プロパティは、符号なし 32-bit 整数を表し、値は 0 から 2<sup><font size="2">32-1</font></sup> の範囲の値しか保持できません。</p> + +<p>コンストラクタを使用して<code>配列</code>を生成した場合、最初の引数が<code><font face="Courier New">配列</font></code>の length と解釈されるように、リテラル表記を使用したいかもしれません。</p> + +<p>さもなければ、length プロパティが設定される前、またはコンストラクタの引数として使用される前に、length を制限したいかもしれません。</p> + +<h2 id="例">例</h2> + +<h3 id="無効なケース">無効なケース</h3> + +<pre class="brush: js example-bad">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 を設定 +</pre> + +<h3 id="有効なケース">有効なケース</h3> + +<pre class="brush: js example-good">[ 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) +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("Array")}}</li> + <li>{{jsxref("Array.length")}}</li> + <li>{{jsxref("ArrayBuffer")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">ReferenceError: invalid assignment left-hand side +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("ReferenceError")}}。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>どこかに予想外の割り当てがあります。たとえば、<a href="/ja/docs/Web/JavaScript/Reference/Operators/Assignment_Operators">代入演算子</a> と <a href="/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">比較演算子</a> にミスマッチがあるせいかもしれません。"<code>=</code>" 記号が 1 つの場合は変数に値を割り当てる一方、"<code>==</code>" か "<code>===</code>" 演算子は値を比較します。</p> + +<h2 id="例">例</h2> + +<pre class="brush: js example-bad">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 +</pre> + +<p><code>if</code> ステートメントでは、比較演算子("==")が必要ですし、文字連結にはプラス("+")演算子が必要です。</p> + +<pre class="brush: js example-good">if (Math.PI == 3 || Math.PI == 4) { + console.log('no way!'); +} + +var str = 'Hello, ' ++ 'from the ' ++ 'other side!'; +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Operators/Assignment_Operators">代入演算子</a></li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">比較演算子</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">TypeError: invalid assignment to const "x" (Firefox) +TypeError: Assignment to constant variable. (Chrome) +TypeError: Redeclaration of const 'x' (IE/Edge) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか??</h2> + +<p>定数は、通常の実行中にプログラムによって変更できない値です。再代入も再宣言もできません。JavaScript では、定数を <code><a href="/ja/docs/Web/JavaScript/Reference/Statements/const">const</a></code> キーワードで宣言します。</p> + +<h2 id="例">例</h2> + +<h3 id="無効な再宣言">無効な再宣言</h3> + +<p>同じブロックスコープで同じ定数名に値を代入すると、エラーがスローされます。</p> + +<pre class="brush: js example-bad">const COLUMNS = 80; + +// ... + +COLUMNS = 120; // TypeError: invalid assignment to const `COLUMNS'</pre> + +<h3 id="エラーを修正">エラーを修正</h3> + +<p>エラーを修正するには、複数の選択肢があります。問題となっている定数で、達成しようとしていたことを確認してください。</p> + +<h4 id="リネーム">リネーム</h4> + +<p>ほかの定数を宣言するつもりだったならば、ほかの名前を選んで、リネームしてください。この定数名はすでにこのスコープで使用されています。</p> + +<pre class="brush: js example-good">const COLUMNS = 80; +const WIDE_COLUMNS = 120;</pre> + +<h4 id="const、let、var"><code>const</code>、<code>let</code>、<code>var</code>?</h4> + +<p>定数を宣言するつもりがなかったのなら、const を使用しないでください。ブロックスコープの変数なら、<code><a href="/ja/docs/Web/JavaScript/Reference/Statements/let">let</a></code> で、グローバルスコープの変数なら <code><a href="/ja/docs/Web/JavaScript/Reference/Statements/var">var</a></code> で宣言してください。</p> + +<pre class="brush: js example-good">let columns = 80; + +// ... + +let columns = 120; +</pre> + +<h4 id="スコープ">スコープ</h4> + +<p>正しいスコープにあるか確認してください。たとえば、この定数はこのスコープにあるべきなのでしょうか?それとも関数にあるべきなのでしょうか?</p> + +<pre class="brush: js example-good">const COLUMNS = 80; + +function setupBigScreenEnvironment() { + const COLUMNS = 120; +}</pre> + +<h3 id="const_と不変性"><code>const</code> と不変性</h3> + +<p><code>const</code> 宣言は、値への読み取り専用参照を作成します。それが保持している値が不変であることを意味するものでは<strong>なく</strong>、単に変数識別子を再割り当てできないだけです。たとえば、コンテンツがオブジェクトである場合、オブジェクト自体は依然として変更可能であることを意味します。 つまり、変数に格納されている値を変更することはできません:</p> + +<pre class="brush: js example-bad">const obj = {foo: 'bar'}; +obj = {foo: 'baz'}; // TypeError: invalid assignment to const `obj' +</pre> + +<p>しかし、変数内のプロパティは変更できます:</p> + +<pre class="brush: js example-good">obj.foo = 'baz'; +obj; // Object { foo: "baz" }</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/const">const</a></code></li> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/let">let</a></code></li> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/var">var</a></code></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">RangeError: invalid date (Firefox) +RangeError: invalid time value (Chrome) +RangeError: Provided date is not in valid range (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("RangeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>{{jsxref("Date")}} か {{jsxref("Date.parse()")}} に無効な日付につながる文字列が渡されました。</p> + +<h2 id="例">例</h2> + +<h3 id="無効なケース">無効なケース</h3> + +<p>ISO フォーマットの文字列に不正な要素の値を含む認識できない文字列や日付は、通常 {{jsxref("NaN")}} を返します。しかし、Firefox における次のケースのように、実装によっては不適合な ISO フォーマットの文字列は <code>RangeError: invalid date</code> をスローします:</p> + +<pre class="brush: js example-bad">new Date('foo-bar 2014'); +new Date('2014-25-23').toISOString(); +new Date('foo-bar 2014').toString(); +</pre> + +<p>一方、これは Firefox で {{jsxref("NaN")}} を返します:</p> + +<pre class="brush: js example-bad">Date.parse('foo-bar 2014'); // NaN</pre> + +<p>詳細は {{jsxref("Date.parse()")}} ドキュメントをご覧ください。</p> + +<h3 id="有効なケース">有効なケース</h3> + +<pre class="brush: js example-good">new Date('05 October 2011 14:48 UTC');</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("Date")}}</li> + <li>{{jsxref("Date.prototype.parse()")}}</li> + <li>{{jsxref("Date.prototype.toISOString()")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: for-in loop head declarations may not have initializers (Firefox) + +SyntaxError: for-in loop variable declaration may not have an initializer. (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a>でのみ、{{jsxref("SyntaxError")}}。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a> ループのヘッダーに初期化式が含まれています。つまり、変数を宣言し、値を代入しています |<code>for (var i = 0 in obj)</code>|。非 strict モードでは、このヘッダー宣言は暗黙裡に無視され、<code>|for (var i in obj)|</code> のように動作します。しかし、<a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a>では <code>SyntaxError</code> がスローされます。</p> + +<h2 id="例">例</h2> + +<p>この例は <code>SyntaxError</code> をスローします:</p> + +<pre class="brush: js example-bad">"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 +</pre> + +<h3 id="有効な_for-in_ループ">有効な for-in ループ</h3> + +<p>for-in ループのヘッダーから初期化子 (<code>i = 0</code>) を削除します。</p> + +<pre class="brush: js example-good">"use strict"; + +var obj = {a: 1, b: 2, c: 3 }; + +for (var i in obj) { + console.log(obj[i]); +} +</pre> + +<h3 id="Array_イテレーション">Array イテレーション</h3> + +<p>for...in ループを <a href="/ja/docs/Web/JavaScript/Reference/Statements/for...in#Array_iteration_and_for...in">Array イテレーションで使用すべきではありません</a>。{{jsxref("Array")}} を反復するのに、<code>for-in</code> ループの代わりに <code><a href="/ja/docs/Web/JavaScript/Reference/Statements/for">for</a></code> ループを使用するつもりはありますか?<code>for</code> ループでは、初期化子を設定できます:</p> + +<pre class="brush: js example-good">var arr = [ "a", "b", "c" ] + +for (var i = 2; i < arr.length; i++) { + console.log(arr[i]); +} + +// "c"</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a></code></li> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/for...of">for...of</a></code> – strict モードと非 strict モードどちらでも初期化できない。</li> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/for">for</a></code> – array イテレーションに向いており、初期化子を定義できる。</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">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) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Statements/for...of">for...of</a> ループのヘッダ―に初期化式が含まれています。つまり、変数が宣言され、値が代入されています |<code>for (var i = 0 of iterable)</code>|。これは、for-of ループでは許可されていません。初期化できる <code><a href="/ja/docs/Web/JavaScript/Reference/Statements/for">for</a></code> ループを使用した方が良いかもしれません。</p> + +<h2 id="例">例</h2> + +<h3 id="不正な_for-of_ループ">不正な <code>for-of</code> ループ</h3> + +<pre class="brush: js example-bad">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</pre> + +<h3 id="有効な_for-of_ループ">有効な <code>for-of</code> ループ</h3> + +<p><code>for-of</code> ループのヘッダーから初期化子 (<code>value = 50</code>) を取り除く必要があります。おそらく、50 をオフセット値にしようとしているのでしょうから、たとえばループのボディー内で 50 を加えられます。</p> + +<pre class="brush: js example-good">let iterable = [10, 20, 30]; + +for (let value of iterable) { + value += 50; + console.log(value); +} +// 60 +// 70 +// 80 +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/for...of">for...of</a></code></li> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a></code> – strict モードでは同様に初期化できない (<a href="/ja/docs/Web/JavaScript/Reference/Errors/Invalid_for-in_initializer">SyntaxError: for-in loop head declarations may not have initializers</a>)</li> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/for">for</a></code> – 反復時に初期化子を許可している</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">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)</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Operators/instanceof"><code>instanceof</code> 演算子</a> は、右側のオペランドがコンストラクターオブジェクトであることを想定しています。つまり、右側のオペランドは <code>prototype</code> プロパティを持ち、呼び出し可能であるオブジェクトである必要があります。</p> + +<h2 id="例">例</h2> + +<pre class="brush: js example-bad">"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 +</pre> + +<p>これらのエラータイプを修正するには、<a href="/ja/docs/Web/JavaScript/Reference/Operators/instanceof"><code>instanceof</code> 演算子</a> を <a href="/ja/docs/Web/JavaScript/Reference/Operators/typeof"><code>typeof</code> 演算子</a> に置き換えるか、評価結果の代わりに関数名を使用するようにしてください。</p> + +<pre class="brush: js example-good">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 +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Operators/instanceof"><code>instanceof</code> 演算子</a></li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Operators/typeof"><code>typeof</code> 演算子</a></li> +</ul> + +<p> </p> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">TypeError: 'x' is not iterable (Firefox, Chrome) +TypeError: 'x' is not a function or its return value is not iterable (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p><a href="/ja/docs/Web/JavaScript/Guide/Loops_and_iteration#for...of_statement">for…of</a> の右側や {{jsxref("Promise.all")}} や {{jsxref("TypedArray.from")}} のような関数の引数として与えられた値が <a href="/ja/docs/Web/JavaScript/Reference/Iteration_protocols">反復可能オブジェクト</a> ではありません。反復可能なものは、{{jsxref("Array")}} や {{jsxref("String")}}、{{jsxref("Map")}}、ジェネレーターの結果のようなビルトイン反復可能型や <a href="/ja/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol">反復処理プロトコル</a> を実装したオブジェクトです。</p> + +<h2 id="例">例</h2> + +<h3 id="オブジェクトのプロパティを反復処理する">オブジェクトのプロパティを反復処理する</h3> + +<p>JavaScript では、<a href="/ja/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol">反復処理プロトコル</a> を実装していない限り {{jsxref("Object")}} は反復処理できません。それゆえ、オブジェクトのプロパティを反復処理するために <a href="/ja/docs/Web/JavaScript/Guide/Loops_and_iteration#for...of_statement">for…of</a> を使用することはできません。</p> + +<pre class="brush: js example-bad">var obj = { 'France': 'Paris', 'England': 'London' }; +for (let p of obj) { // TypeError: obj is not iterable + // … +} +</pre> + +<p>代わりに、オブジェクトのプロパティを反復処理するためには {{jsxref("Object.keys")}} か {{jsxref("Object.entries")}} を使用してください。</p> + +<pre class="brush: js example-good">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); + + +</pre> + +<p>このユースケースのそのほかの選択肢として、{{jsxref("Map")}} を使用することもできます:</p> + +<pre class="brush: js example-good">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); +</pre> + +<h3 id="ジェネレーターを反復処理する">ジェネレーターを反復処理する</h3> + +<p><a href="/ja/docs/Web/JavaScript/Guide/Iterators_and_Generators#Generators">ジェネレーター</a> は反復可能オブジェクトを生成するために呼び出す関数です。</p> + +<pre class="brush: js example-bad">function* generate(a, b) { + yield a; + yield b; +} + +for (let x of generate) // TypeError: generate is not iterable + console.log(x); +</pre> + +<p>ジェネレーターを呼び出していないとき、ジェネレーターに対応した {{jsxref("Function")}} オブジェクトは呼び出し可能ですが、反復処理はできません。ジェネレーターを呼び出すと、ジェネレーターの実行中に生成された値を反復処理する反復可能オブジェクトが生成されます。</p> + +<pre class="brush: js example-good">function* generate(a, b) { + yield a; + yield b; +} + +for (let x of generate(1,2)) + console.log(x); +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterable_protocol">反復処理プロトコル</a></li> + <li>{{jsxref("Object.keys")}}</li> + <li>{{jsxref("Object.entries")}}</li> + <li>{{jsxref("Map")}}</li> + <li><a href="/ja/docs/Web/JavaScript/Guide/Iterators_and_Generators#Generators">イテレーターとジェネレーター</a></li> + <li><a href="/ja/docs/Web/JavaScript/Guide/Loops_and_iteration#for...of_statement">for…of</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<p>JavaScript の例外で、 {{jsxref("JSON.parse()")}} が文字列を JSON として解釈するのに失敗した場合に発生します。</p> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox notranslate">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)</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="What_went_wrong" name="What_went_wrong">エラーの原因</h2> + +<p>{{jsxref("JSON.parse()")}} は文字列を JSON として解釈します。この文字列は妥当な JSON であるべきであり、不正確な構文に出会った場合、このエラーが発生します。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="JSON.parse_does_not_allow_trailing_commas" name="JSON.parse_does_not_allow_trailing_commas">JSON.parse() は末尾のカンマを許容しない</h3> + +<p>どちらの行でも SyntaxError が発生します。</p> + +<pre class="brush: js example-bad notranslate">JSON.parse('[1, 2, 3, 4,]'); +JSON.parse('{"foo": 1,}'); +// SyntaxError JSON.parse: unexpected character +// at line 1 column 14 of the JSON data +</pre> + +<p>末尾のカンマを省略すると、正しく JSON として解釈します。</p> + +<pre class="brush: js example-good notranslate">JSON.parse('[1, 2, 3, 4]'); +JSON.parse('{"foo": 1}');</pre> + +<h3 id="Property_names_must_be_double-quoted_strings" name="Property_names_must_be_double-quoted_strings">プロパティ名は二重引用符で囲んだ文字列でなければならない</h3> + +<p>プロパティの周囲を囲むのに、たとえば'foo' のように単一引用符を使用してはいけません。</p> + +<pre class="brush: js example-bad notranslate">JSON.parse("{'foo': 1}"); +// SyntaxError: JSON.parse: expected property name or '}' +// at line 1 column 2 of the JSON data</pre> + +<p>代わりに "foo" と書いてください。</p> + +<pre class="brush: js example-good notranslate">JSON.parse('{"foo": 1}');</pre> + +<h3 id="Leading_zeros_and_decimal_points" name="Leading_zeros_and_decimal_points">先頭のゼロと小数点</h3> + +<p>01 のような先頭の 0 は使用できません。また、小数点の後には少なくとも 1 桁以上が続かなければなりません。</p> + +<pre class="brush: js example-bad notranslate">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 +</pre> + +<p>0 を除いて 1 だけを書いてください。また、小数点の後には少なくとも 1 桁の数字を置いてください。</p> + +<pre class="brush: js example-good notranslate">JSON.parse('{"foo": 1}'); +JSON.parse('{"foo": 1.0}'); +</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("JSON")}}</li> + <li>{{jsxref("JSON.parse()")}}</li> + <li>{{jsxref("JSON.stringify()")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<p>JavaScript の例外 "malformed formal parameter" は、 <code><a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/Function">Function()</a></code> 呼び出しの引数リストが何らか無効である場合に発生します。</p> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox notranslate">SyntaxError: Expected {x} (Edge) +SyntaxError: malformed formal parameter (Firefox) +</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="What_went_wrong" name="What_went_wrong">原因</h2> + +<p><code><a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/Function">Function()</a></code> を使用しいて、最低 2 つの引数を渡すとします。最後の引数は、作成する新しい関数のソースコードです。 残りの引数は、新しく生成する関数の引数リストを構成します。</p> + +<p>引数リストの何らかが無効です。引数名として <code>if</code> や <code>var</code> のようなキーワードを選んでしまったかもしれませんし、引数リストに誤った区切りがあるかもしれません。または、数値やオブジェクトのような無効な値を渡しているかもしれません。</p> + +<h3 id="OK_that_fixed_my_problem._But_why_didnt_you_say_that_in_the_first_place" name="OK_that_fixed_my_problem._But_why_didnt_you_say_that_in_the_first_place">問題は解決した。しかし、なぜ最初にそれを伝えないのか?</h3> + +<p>確かに、エラーメッセージの文言は少々奇妙です。 "Formal parameter" は、 "関数の引数" を表現するにはファンシーな言い方です。 さらに、"malformed" という言葉を使っていますが、それは Firefox エンジニアが 19 世紀のゴッシックホラー小説の大ファンだからです。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Invalid_cases" name="Invalid_cases">無効な場合</h3> + +<pre class="brush: js example-bad notranslate">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) +</pre> + +<h3 id="Valid_cases" name="Valid_cases">妥当な場合</h3> + +<pre class="brush: js example-good notranslate">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; }; +</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/Function">Function()</a></code></li> + <li><a href="/en-US/docs/Web/JavaScript/Guide/Functions">About functions</a></li> + <li><a href="https://www.gutenberg.org/ebooks/84"><em>Frankenstein</em> by Mary Wollstonecraft Shelley, full e-text</a> ("Cursed (although I curse myself) be the hands that formed you! You have made me wretched beyond expression. You have left me no power to consider whether I am just to you or not. Begone! Relieve me from the sight of your detested form.")</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">URIError: malformed URI sequence (Firefox) +URIError: URI malformed (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("URIError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>URI エンコードかデコードが成功しませんでした。{{jsxref("decodeURI")}} か {{jsxref("encodeURI")}}、{{jsxref("encodeURIComponent")}}、{{jsxref("decodeURIComponent")}} 関数の引数が無効のため、関数は適切にエンコード、またはデコードできませんでした。</p> + +<h2 id="例">例</h2> + +<h3 id="エンコーディング">エンコーディング</h3> + +<p>エンコーディングは、特定の文字インスタンスをそれぞれ、文字の UFT-8 エンコーディングを表す 1 つか 2 つ、3 つ 4 つのシーケンスに置き換えます。高低ペアの一部ではないサロゲートをエンコードしようとした場合、{{jsxref("URIError")}} がスローされます。たとえば:</p> + +<pre class="brush: js example-bad">encodeURI('\uD800'); +// "URIError: malformed URI sequence" + +encodeURI('\uDFFF'); +// "URIError: malformed URI sequence" +</pre> + +<p>高低ペアは ok です。たとえば:</p> + +<pre class="brush: js example-good">encodeURI('\uD800\uDFFF'); +// "%F0%90%8F%BF"</pre> + +<h3 id="デコーディング">デコーディング</h3> + +<pre class="brush: js example-bad">decodeURIComponent('%E0%A4%A'); +// "URIError: malformed URI sequence" +</pre> + +<p>適切な入力を行うと、通常は次のようになります:</p> + +<pre class="brush: js example-good">decodeURIComponent('JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B'); +// "JavaScript_шеллы"</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("URIError")}}</li> + <li>{{jsxref("decodeURI")}}</li> + <li>{{jsxref("encodeURI")}}</li> + <li>{{jsxref("encodeURIComponent")}}</li> + <li>{{jsxref("decodeURIComponent")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: missing ] after element list +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>どこかで配列初期化構文のエラーがあります。閉じ括弧("<code>]</code>")かカンマ("<code>,</code>")が不足している可能性があります。</p> + +<h2 id="例">例</h2> + +<h3 id="不完全な配列初期化">不完全な配列初期化</h3> + +<pre class="brush: js example-bad">var list = [1, 2, + +var instruments = [ + "Ukulele", + "Guitar", + "Piano" +}; + +var data = [{foo: "bar"} {bar: "foo"}]; +</pre> + +<p>次のように修正できます:</p> + +<pre class="brush: js example-good">var list = [1, 2]; + +var instruments = [ + "Ukulele", + "Guitar", + "Piano" +]; + +var data = [{foo: "bar"}, {bar: "foo"}];</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("Array")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: missing : after property id +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer">オブジェクト初期化子</a>構文でオブジェクトを生成する場合、オブジェクトのプロパティのキーと値をコロン (<code>:</code>) で区切ります。</p> + +<pre class="brush: js">var obj = { propertyKey: 'value' }; +</pre> + +<h2 id="例">例</h2> + +<h3 id="コロン_vs._代入記号">コロン vs. 代入記号</h3> + +<p>この方法で代入記号をオブジェクト初期化子構文として使用できないため、このコードは失敗します。</p> + +<pre class="brush: js example-bad">var obj = { propertyKey = 'value' }; +// SyntaxError: missing : after property id +</pre> + +<p>正しくはコロンを使用するか、オブジェクトを生成した後に角括弧を使用して新しいプロパティを割り当てます。</p> + +<pre class="brush: js example-good">var obj = { propertyKey: 'value' }; + +// または + +var obj = { }; +obj['propertyKey'] = 'value'; +</pre> + +<h3 id="空のプロパティ">空のプロパティ</h3> + +<p>このような方法で空のプロパティを生成できません:</p> + +<pre class="brush: js example-bad">var obj = { propertyKey; }; +// SyntaxError: missing : after property id +</pre> + +<p>値がないプロパティを定義する必要がある場合、値として {{jsxref("null")}} を使用します。</p> + +<pre class="brush: js example-good">var obj = { propertyKey: null };</pre> + +<h3 id="計算されたプロパティ">計算されたプロパティ</h3> + +<p>式からプロパティキーを生成する場合、角括弧を使用します。そうしなければ、プロパティ名は計算できません:</p> + +<pre class="brush: js example-bad">var obj = { 'b'+'ar': 'foo' }; +// SyntaxError: missing : after property id +</pre> + +<p>式を括弧 <code>[]</code> に入れます:</p> + +<pre class="brush: js example-good">var obj = { ['b'+'ar']: 'foo' };</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer">オブジェクト初期化子</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: missing } after function body +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>どこかで関数を生成するときに、構文上のミスをしています。また、括弧や中括弧の閉じが正しい順番かどうかを確認してください。コードをフォーマットしたり、インデントしたりすると、ジャングルを探すのに役立つと思います。</p> + +<h2 id="例">例</h2> + +<h3 id="閉じ括弧忘れ">閉じ括弧忘れ</h3> + +<p>しばしば、関数コードで閉じ括弧を忘れることがあります:</p> + +<pre class="brush: js example-bad">var charge = function() { + if (sunny) { + useSolarCells(); + } else { + promptBikeRide(); +}; +</pre> + +<p>正しくは:</p> + +<pre class="brush: js example-good">var charge = function() { + if (sunny) { + useSolarCells(); + } else { + promptBikeRide(); + } +};</pre> + +<p>たとえば、{{Glossary("IIFE")}} や<a href="/ja/docs/Web/JavaScript/Closures">クロージャ</a>、そのほかのたくさんの中括弧や括弧を使用する構造体を使用しているときは、さらに分かりにくくなります。</p> + +<pre class="brush: js example-bad">(function() { if (true) { return false; } ); +</pre> + +<p>多くの場合、異なるようにインデントするか、インデントをダブルチェックすると、これらのエラーを特定するのに役立ちます。</p> + +<pre class="brush: js example-good">(function() { + if (true) { + return false; + } +});</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Guide/Functions">関数</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: missing } after property list +</pre> + +<h2 id="Error_type">Error type</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>どこかに <a href="/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer">object initializer</a> 構文の誤りがあります。実際に波括弧を忘れているかもしれませんが、セミコロンが不足ている可能性もあります。また、閉じ波括弧や括弧が正しい順序になっているかも確認してください。コードをインデントやフォーマットすると、多少見通しが良くなります。</p> + +<h2 id="例">例</h2> + +<h3 id="カンマ忘れ">カンマ忘れ</h3> + +<p>多くの場合、object initializer コードにカンマ忘れがあります:</p> + +<pre class="brush: js example-bad">var obj = { + a: 1, + b: { myProp: 2 } + c: 3 +}; +</pre> + +<p>次のように修正できます:</p> + +<pre class="brush: js example-good">var obj = { + a: 1, + b: { myProp: 2 }, + c: 3 +}; +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Operators/Object_initializer">Object initializer</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: missing formal parameter (Firefox) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>"Formal parameter" とは、 "関数の引数" のことです。関数宣言で、有効な引数を忘れています。関数定義において、引数は {{Glossary("Identifier", "identifiers")}} でなければならず、数字や文字列、オブジェクトのような値であってはいけません。関数の宣言と関数の呼び出しは、異なる 2 つのステップです。宣言時には引数として識別子が求められ、関数を呼び出すときだけ、関数が使用する値を提供します。</p> + +<p>{{glossary("JavaScript")}} では、識別子はアルファベット文字 (または "$" か "_") だけを含めることができ、数値から始められません。文字列はデータですが、識別子はコードの一部です。そのため、識別子と<strong>文字列</strong>は異なるものです。</p> + +<h2 id="例">例</h2> + +<p>関数を定義するとき、関数の引数は識別子でなければなりません。引数として値を提供しているため、これらの関数宣言はすべて失敗します:</p> + +<pre class="brush: js example-bad highlight:[1,6,11]">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 +</pre> + +<p>関数宣言では、識別子を使用しなければなりません:</p> + +<pre class="brush: js example-good highlight:[1,5,9]">function square(number) { + return number * number; +}; + +function greet(greeting) { + return greeting; +}; + +function log(arg) { + console.log(arg) +};</pre> + +<p>次に、好きな引数を渡してこれらの関数を呼び出せます:</p> + +<pre class="brush: js">square(2); // 4 + +greet("Howdy"); // "Howdy" + +log({obj: "value"}); // Object { obj: "value" } +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>formal parameters に関係するその他のエラー: + <ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Errors/Malformed_formal_parameter">SyntaxError: Malformed formal parameter</a></li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Errors/Redeclared_parameter">SyntaxError: redeclaration of formal parameter "x"</a></li> + </ul> + </li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: missing = in const declaration (Firefox) +SyntaxError: Missing initializer in const declaration (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>定数は、通常の実行中にプログラムによって変更できない値です。これは、再代入で変更できず、再宣言もできません。JavaScript では、定数は <code><a href="/ja/docs/Web/JavaScript/Reference/Statements/const">const</a></code> キーワードで宣言します。定数の初期化子が必要です。つまり、宣言と同じステートメントで値を指定する必要があります (後で変更できないため、これには意味があります)。</p> + +<h2 id="Examples">Examples</h2> + +<h3 id="定数初期化子忘れ">定数初期化子忘れ</h3> + +<p><code>var</code> や <code>let</code> と異なり、<code>const</code> 宣言では値を指定する必要があります。これはエラーをスローします:</p> + +<pre class="brush: js example-bad">const COLUMNS; +// SyntaxError: missing = in const declaration</pre> + +<h3 id="エラーを修正する">エラーを修正する</h3> + +<p>このエラーを修正するには、複数の方法があります。定数で何をしようとしていたかを確認してください。</p> + +<h4 id="定数値を追加する">定数値を追加する</h4> + +<p>宣言と同じステートメントで定数の値を指定します:</p> + +<pre class="brush: js example-good">const COLUMNS = 80;</pre> + +<h4 id="const_か_let、var"><code>const</code> か <code>let</code>、<code>var</code>?</h4> + +<p>定数を宣言したいわけではない場合、<code>const</code> を使用しないでください。ブロックスコープの変数を <code><a href="/ja/docs/Web/JavaScript/Reference/Statements/let">let</a></code> で宣言したいか、グローバル変数を <code><a href="/ja/docs/Web/JavaScript/Reference/Statements/var">var</a></code> で宣言したいのかもしれません。双方ともに、初期値を必要としません。</p> + +<pre class="brush: js example-good">let columns; +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/const">const</a></code></li> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/let">let</a></code></li> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/var">var</a></code></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: missing name after . operator +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Operators/Property_Accessors">メンバー演算子</a>に対して、ドット演算子が (<code>.</code>) 使われました。アクセスしたいプロパティ名を指定しなければなりません。計算されたプロパティアクセスのためには、プロパティアクセスをドットを使用したものから角括弧を使用したものに変更する必要があります。それにより、式を計算できるようになります。そうではなく、連結しようとしましたか? その場合は、プラス演算子 (<code>+</code>) を代わりに使用してください。以下の例をご覧ください。</p> + +<h2 id="例">例</h2> + +<h3 id="プロパティアクセス">プロパティアクセス</h3> + +<p>JavaScript の<a href="/ja/docs/Web/JavaScript/Reference/Operators/Property_Accessors">メンバー演算子</a>は、ドット (.) か角括弧 (<code>[]</code>) を使用しますが、両方は使いません。角括弧で計算されたプロパティアクセスができます。</p> + +<pre class="brush: js example-bad">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 +</pre> + +<p>このコードを修正するには、このようにオブジェクトにアクセスする必要があります:</p> + +<pre class="brush: js example-good">obj.foo.bar; // "baz" +// or alternatively +obj["foo"]["bar"]; // "baz" + +// computed properties require square brackets +obj.foo["bar" + i]; // "baz2" +</pre> + +<h3 id="プロパティアクセス_vs._連結">プロパティアクセス vs. 連結</h3> + +<p>({{Glossary("PHP")}} のような) ほかの言語から来たなら、ドット演算子 (<code>.</code>) と連結演算子 (<code>+</code>) を混同しがちです。</p> + +<pre class="brush: js example-bad">console.log("Hello" . "world"); + +// SyntaxError: missing name after . operator</pre> + +<p>連結のためにはプラス記号を使用すべきです:</p> + +<pre class="brush: js example-good">console.log("Hello" + "World");</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Operators/Property_Accessors">メンバー演算子</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: missing ) after argument list +</pre> + +<h2 id="Error_type" name="Error_type">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}。</p> + +<h2 id="What_went_wrong" name="What_went_wrong">何がうまくいかなかったのか?</h2> + +<p>関数の呼び出し方にエラーがあります。たとえば、タイポや演算子の記述忘れ、文字列のエスケープミスの可能性が考えられます。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<p>文字列を連結する "+" 演算子がないため、JavaScript は <code>log</code> 関数の引数として、<code>"PI: "</code> だけを想定します。この場合、閉じ括弧で終了する必要があります。</p> + +<pre class="brush: js example-bad">console.log('PI: ' Math.PI); +// SyntaxError: missing ) after argument list +</pre> + +<p>"<code>+</code>" 演算子を追加することで、<code>log</code> の呼び出しを修正できます:</p> + +<pre class="brush: js example-good">console.log('PI: ' + Math.PI); +// "PI: 3.141592653589793"</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Guide/Functions">関数</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: missing ) after condition +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/if...else">if</a></code> 条件の書き方にエラーがあります。いくつかのプログラミング言語では、コードは異なる入力に応じて意思決定とアクションを実行する必要があります。if ステートメントは指定した条件を満たす場合、処理を実行します。JavaScript では、この条件は <code>if</code> キーワードの後に括弧を付ける必要があります。次ように:</p> + +<pre class="brush: js">if (condition) { + // do something if the condition is true +}</pre> + +<h2 id="例">例</h2> + +<p>ちょっとした見落としかもしれないので、慎重にコード内のすべての括弧をチェックしてください。</p> + +<pre class="brush: js example-bad">if (3 > Math.PI { + console.log("wait what?"); +} + +// SyntaxError: missing ) after condition +</pre> + +<p>このコードを修正するには、条件を閉じる括弧を追加する必要があります。</p> + +<pre class="brush: js example-good">if (3 > Math.PI) { + console.log("wait what?"); +}</pre> + +<p>あなたがほかの言語から来たなら、JavaScript で同じ意味を持たないキーワードや意味のないキーワードを追加してしまいがちです。</p> + +<pre class="brush: js example-bad">if (done is true) { + console.log("we are done!"); +} + +// SyntaxError: missing ) after condition +</pre> + +<p>代わりに、正しい<a href="/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">比較演算子</a>を使うべきです。たとえば:</p> + +<pre class="brush: js example-good">if (done === true) { + console.log("we are done!"); +}</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/if...else">if...else</a></code></li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">比較演算子</a></li> + <li> + <p><a href="/ja/docs/Learn/JavaScript/Building_blocks/conditionals">Making decisions in your code — conditionals</a></p> + </li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: missing ; before statement +</pre> + +<h2 id="Error_type" name="Error_type">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}.</p> + +<h2 id="What_went_wrong" name="What_went_wrong">何がうまくいかなかったのか?</h2> + +<p>どこかでセミコロン(<code>;</code>)を忘れています。<a href="/ja/docs/Web/JavaScript/Reference/Statements">JavaScript 文</a>はセミコロンで終えなければなりません。これらのいくつかは、<a href="/ja/docs/Web/JavaScript/Reference/Lexical_grammar#.E8.87.AA.E5.8B.95.E3.82.BB.E3.83.9F.E3.82.B3.E3.83.AD.E3.83.B3.E6.8C.BF.E5.85.A5">自動セミコロン挿入(ASI)</a>の影響を受けますが、この場合JavaScript がソースコードを正確に解析するためには、セミコロンを提供する必要があります。</p> + +<p>しかし、多くの場合、このエラーは、文字列の不適切なエスケープや <code>var</code> の誤った使用などのその他のエラーの結果として発生します。また、どこかで括弧が多すぎるかもしれません。このエラーがスローされた場合、注意深く構文をチェックしなければなりません。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Unescaped_strings" name="Unescaped_strings">エスケープしていない文字列</h3> + +<p>このエラーは、適切に文字列をエスケープしておらず、JavaScript エンジンが文字列がすでに終了していると予測するときにしばしば発生します。たとえば:</p> + +<pre class="brush: js example-bad">var foo = 'Tom's bar'; +// SyntaxError: missing ; before statement</pre> + +<p>ダブルクオートを使用するか、アポストロフィをエスケープします:</p> + +<pre class="brush: js example-good">var foo = "Tom's bar"; +var foo = 'Tom\'s bar'; +</pre> + +<h3 id="Declaring_properties_with_var" name="Declaring_properties_with_var">var を使用したプロパティ宣言</h3> + +<p>オブジェクトや配列のプロパティを、<code>var</code> を使って宣言することは<strong>できません</strong>。</p> + +<pre class="brush: js example-bad">var obj = {}; +var obj.foo = 'hi'; // SyntaxError missing ; before statement + +var array = []; +var array[0] = 'there'; // SyntaxError missing ; before statement +</pre> + +<p>替わりに、<code>var</code> キーワードを省略します:</p> + +<pre class="brush: js example-good">var obj = {}; +obj.foo = 'hi'; + +var array = []; +array[0] = 'there'; +</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Lexical_grammar#.E8.87.AA.E5.8B.95.E3.82.BB.E3.83.9F.E3.82.B3.E3.83.AD.E3.83.B3.E6.8C.BF.E5.85.A5">自動セミコロン挿入(ASI)</a></li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Statements">JavaScript 文</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">TypeError: Object.create requires more than 0 arguments +TypeError: Object.setPrototypeOf requires more than 1 argument +TypeError: Object.defineProperties requires more than 0 arguments +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>関数の呼び出し方にエラーがあります。より多くの引数を提供する必要があります。</p> + +<h2 id="例">例</h2> + +<p>{{jsxref("Object.create()")}} メソッドは、少なくとも 1 つは引数が必要です。また、{{jsxref("Object.setPrototypeOf()")}} メソッドは少なくとも 2 つ引数が必要です:</p> + +<pre class="brush: js example-bad">var obj = Object.create(); +// TypeError: Object.create requires more than 0 arguments + +var obj = Object.setPrototypeOf({}); +// TypeError: Object.setPrototypeOf requires more than 1 argument +</pre> + +<p>たとえば、{{jsxref("null")}} を prototype として設定することで修正できます:</p> + +<pre class="brush: js example-good">var obj = Object.create(null); + +var obj = Object.setPrototypeOf({}, null);</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Guide/Functions">関数</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">RangeError: repeat count must be non-negative (Firefox) +RangeError: Invalid count value (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("RangeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>{{jsxref("String.prototype.repeat()")}} メソッドを使用しています。<code>count</code> パラメーターは、文字列の繰り返し回数を指定します。 これは 0 から正の {{jsxref("Infinity")}} 以下の値である必要があり、負数は使用できません。 有効値の範囲はこのように表現できます: [0, +∞)。</p> + +<h2 id="例">例</h2> + +<h3 id="無効なケース">無効なケース</h3> + +<pre class="brush: js example-bad">'abc'.repeat(-1); // RangeError </pre> + +<h3 id="有効なケース">有効なケース</h3> + +<pre class="brush: js example-good">'abc'.repeat(0); // '' +'abc'.repeat(1); // 'abc' +'abc'.repeat(2); // 'abcabc' +'abc'.repeat(3.5); // 'abcabcabc' (count は整数に変換されます) +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("String.prototype.repeat()")}}</li> +</ul> 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 +--- +<div>{{JSSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">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) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>どこかでオブジェクトが期待されていますが、提供されませんでした。{{jsxref("null")}} はオブジェクトではなく、動作しません。与えられた状況で適切なオブジェクトを提供しなければなりません。</p> + +<h2 id="例">例</h2> + +<h3 id="プロパティディスクリプタが想定される">プロパティディスクリプタが想定される</h3> + +<p>{{jsxref("Object.create()")}} メソッドや {{jsxref("Object.defineProperty()")}} メソッド、{{jsxref("Object.defineProperties()")}} メソッドを使用するとき、省略可能なディスクリプタ引数として、プロパティディスクリプタオブジェクトが想定されます。(ただの数値のように) オブジェクトを提供しないと、エラーをスローします:</p> + +<pre class="brush: js example-bad">Object.defineProperty({}, 'key', 1); +// TypeError: 1 is not a non-null object + +Object.defineProperty({}, 'key', null); +// TypeError: null is not a non-null object +</pre> + +<p>有効なプロパティディスクリプタはこのようになります:</p> + +<pre class="brush: js example-good">Object.defineProperty({}, 'key', { value: 'foo', writable: false }); +</pre> + +<h3 id="WeakMap_オブジェクトと_WeakSet_オブジェクトはオブジェクトキーが必要"><code>WeakMap</code> オブジェクトと <code>WeakSet</code> オブジェクトはオブジェクトキーが必要</h3> + +<p>{{jsxref("WeakMap")}} オブジェクトと {{jsxref("WeakSet")}} オブジェクトはオブジェクトキーを保持します。そのほかの型をキーとして使用できません。</p> + +<pre class="brush: js example-bad">var ws = new WeakSet(); +ws.add('foo'); +// TypeError: "foo" is not a non-null object</pre> + +<p>代わりにオブジェクトを使用します:</p> + +<pre class="brush: js example-good">ws.add({foo: 'bar'}); +ws.add(window); +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("Object.create()")}}</li> + <li>{{jsxref("Object.defineProperty()")}}、{{jsxref("Object.defineProperties()")}}</li> + <li>{{jsxref("WeakMap")}}、{{jsxref("WeakSet")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">TypeError: null has no properties +TypeError: undefined has no properties +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>{{jsxref("null")}} と {{jsxref("undefined")}} に、アクセス可能なプロパティはありません。</p> + +<h2 id="例">例</h2> + +<pre class="brush: js example-bad">null.foo; +// TypeError: null has no properties + +undefined.bar; +// TypeError: undefined has no properties +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("null")}}</li> + <li>{{jsxref("undefined")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<p>JavaScript の例外 "missing variable name" が頻繁に発生するのは、物の名前を付けるのが大変だからです。あるいは、カンマが間違っているかもしれません。タイプミスがないかチェックしましょう</p> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox notranslate">SyntaxError: missing variable name (Firefox) +SyntaxError: Unexpected token = (Chrome)</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="What_went_wrong" name="What_went_wrong">エラーの原因</h2> + +<p>変数名に名前がありません。これはコードの構文エラーが原因である可能性があります。おそらく、どこかでカンマが間違っているか、名前を付けるのに苦戦しているかです。分かります。名前を付けるのは難しいです。</p> + +<ul> + <li>前の行や宣言が、セミコロンではなくカンマで終了していないかどうか確認しましょう。</li> +</ul> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Missing_a_variable_name" name="Missing_a_variable_name">変数名を忘れている</h3> + +<pre class="brush: js example-bad notranslate">var = "foo"; +</pre> + +<p>良い変数名を考えるのは大変です。みんなそうでした。</p> + +<pre class="brush: js example-good notranslate">var ohGodWhy = "foo";</pre> + +<h3 id="Reserved_keywords_cant_be_variable_names" name="Reserved_keywords_cant_be_variable_names">予約語は変数名にできない</h3> + +<p>いくつかの変数名は<a href="/ja/docs/Web/JavaScript/Reference/Lexical_grammar#Keywords">予約語</a>です。使用できません。ごめんなさい:(</p> + +<pre class="brush: js example-bad notranslate">var debugger = "whoop"; +// SyntaxError: missing variable name +</pre> + +<h3 id="Declaring_multiple_variables" name="Declaring_multiple_variables">複数の変数宣言</h3> + +<p>複数の変数を宣言するときは、カンマに特別な注意を払ってください。余分なカンマがありませんか?誤ってセミコロンの代わりにカンマを加えていませんか?</p> + +<pre class="brush: js example-bad notranslate">var x, y = "foo", +var x, = "foo" + +var first = document.getElementById('one'), +var second = document.getElementById('two'), + +// SyntaxError: missing variable name +</pre> + +<p>修正版:</p> + +<pre class="brush: js example-good notranslate">var x, y = "foo"; +var x = "foo"; + +var first = document.getElementById('one'); +var second = document.getElementById('two');</pre> + +<h3 id="Arrays" name="Arrays">配列</h3> + +<p>JavaScript の {{jsxref("Array")}} リテラルは、値を角括弧で囲む必要があります。これは動作しません。</p> + +<pre class="brush: js example-bad notranslate">var arr = 1,2,3,4,5; +// SyntaxError: missing variable name +</pre> + +<p>正しくは:</p> + +<pre class="brush: js example-good notranslate">var arr = [1,2,3,4,5];</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="http://wiki.c2.com/?GoodVariableNames">良い変数名</a></li> + <li>{{jsxref("Statements/var", "var")}}</li> + <li><a href="/ja/docs/Web/JavaScript/Guide/Grammar_and_types#Declarations">JavaScript ガイドの変数の宣言</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">TypeError: can't delete non-configurable array element (Firefox) +TypeError: Cannot delete property '2' of [object Array] (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>配列を<a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/length#Example:_Shortening_an_array">短縮</a>しようとしていますが、配列の要素が<a href="/ja/docs/Web/JavaScript/Data_structures#Properties">変更不可</a>です。配列の短縮をするとき、新しい配列の長さを超える要素は削除されますが、このシチュエーションでは失敗します。</p> + +<p><code>configurable</code> 属性はプロパティをオブジェクトから削除できるかどうか、および (<code>writable</code> 以外の) 変更できるかどうかを制御します。</p> + +<p>通常、<a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/Array#Syntax">配列初期化子</a>で生成されたオブジェクトのプロパティは変更可能です。しかし、たとえば {{jsxref("Object.defineProperty()")}} が使用された場合、既定でプロパティを変更できません。</p> + +<h2 id="例">例</h2> + +<h3 id="Object.defineProperty_で生成した変更不可能なプロパティ"><code>Object.defineProperty</code> で生成した変更不可能なプロパティ</h3> + +<p>プロパティを変更できないように指定する場合、{{jsxref("Object.defineProperty()")}} は既定で変更できないプロパティを生成します。</p> + +<pre class="brush: js example-bad">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 +</pre> + +<p>配列を短縮したい場合、要素を変更可能に設定する必要があります。</p> + +<pre class="brush: js example-good">var arr = []; +Object.defineProperty(arr, 0, {value: 0, configurable: true}); +Object.defineProperty(arr, 1, {value: "1", configurable: true}); + +arr.length = 1; +</pre> + +<h3 id="シールされた配列"><code>シール</code>された配列</h3> + +<p>{{jsxref("Object.seal()")}} 関数はすべての存在する要素を設定不可にします。</p> + +<pre class="brush: js example-bad">var arr = [1,2,3]; +Object.seal(arr); + +arr.length = 1; +// TypeError: can't delete non-configurable array element +</pre> + +<p>{{jsxref("Object.seal()")}} の呼び出しを削除するか、配列のコピーを取る必要があります。コピーの場合、コピーした配列の短縮は元の配列の長さに影響しません。/p></p> + +<pre class="brush: js example-good">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 +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Data_structures#Properties">[[Configurable]]</a></li> + <li>{{jsxref("Array.length")}}</li> + <li>{{jsxref("Object.defineProperty()")}}</li> + <li>{{jsxref("Object.seal()")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">RangeError: {0} is not a valid code point (Firefox) +RangeError: Invalid code point {0} (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("RangeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>{{jsxref("String.fromCodePoint()")}} メソッドは、有効なコードポイントのみを受け付けます。</p> + +<p><a href="https://ja.wikipedia.org/wiki/%E7%AC%A6%E5%8F%B7%E7%82%B9">コードポイント</a>は、ユニコード文字集合の値です。これは整数 <code>0</code> から <code>0x10FFFF</code> までの範囲です。</p> + +<p>{{jsxref("NaN")}} や、-1 などの負数(negative Integers)、3.14 などの非整数値(non-integers)、<code>0x10FFFF</code>(<code>1114111</code>)より大きい値をこのメソッドで使うことはできません。</p> + +<h2 id="例">例</h2> + +<h3 id="無効なケース">無効なケース</h3> + +<pre class="brush: js example-bad">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</pre> + +<h3 id="有効なケース">有効なケース</h3> + +<pre class="brush: js example-good">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" +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("String.fromCodePoint()")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox">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 +</pre> + +<h2 id="Error_type" name="Error_type">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="What_went_wrong" name="What_went_wrong">何がうまくいかなかったのか?</h2> + +<p>オブジェクト、または変数をコンストラクターとして使おうとしていますが、それらがコンストラクターではありません。コンストラクターとは何かについては、{{Glossary("constructor","コンストラクター")}} か <a href="/ja/docs/Web/JavaScript/Reference/Operators/new"><code>new</code></a> 演算子を見てください。</p> + +<p>{{jsxref("String")}} や {{jsxref("Array")}} のような、<code>new</code> を使用して生成できる数多くのグローバルオブジェクトがあります。しかし、いくつかのグローバルオブジェクトはそうではなく、 それらのプロパティやメソッドは静的です。次の JavaScript 標準ビルトインオブジェクトは、コンストラクターではありません: {{jsxref("Math")}} と {{jsxref("JSON")}}、{{jsxref("Symbol")}}、{{jsxref("Reflect")}}、{{jsxref("Intl")}}、{{jsxref("SIMD")}}、{{jsxref("Atomics")}}。</p> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Statements/function*">function*</a> も、コンストラクターとして使用することはできません。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Invalid_cases" name="Invalid_cases">無効なケース</h3> + +<pre class="brush: js example-bad">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 +</pre> + +<h3 id="A_car_constructor" name="A_car_constructor">car コンストラクター</h3> + +<p>車のためのオブジェクト型を生成するとします。このオブジェクトの型が <code>car</code> と呼ばれ、make と model、year プロパティを持つとします。これを行うには、次の関数を定義します:</p> + +<pre class="brush: js">function Car(make, model, year) { + this.make = make; + this.model = model; + this.year = year; +} +</pre> + +<p>次のように <code>mycar</code> と呼ばれるオブジェクトを生成できます:</p> + +<pre class="brush: js">var mycar = new Car('Eagle', 'Talon TSi', 1993);</pre> + +<h3 id="In_Promises">In Promises</h3> + +<p>When returning an immediately-resolved or immediately-rejected Promise, you do not need to create a <em>new Promise(...)</em> and act on it.</p> + +<p>This is not legal (the <a href="/en-US/docs/Mozilla/JavaScript_code_modules/Promise.jsm/Promise#Constructor">Promise constructor</a> is not being called correctly) and will throw a <code>TypeError: this is not a constructor</code> exception:</p> + +<pre class="brush: js example-bad">return new Promise.resolve(true); +</pre> + +<p>Instead, use the<a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve"> Promise.resolve()</a> or <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/reject">Promise.reject()</a> <a href="https://en.wikipedia.org/wiki/Method_(computer_programming)#Static_methods">static methods</a>:</p> + +<pre class="brush: js">// 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); +</pre> + +<h2 id="See_also" name="See_also">関連項目</h2> + +<ul> + <li>{{Glossary("constructor")}}</li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Operators/new"><code>new</code></a> 演算子</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Message" name="Message">エラーメッセージ</h2> + +<pre class="syntaxbox">TypeError: "x" is not a function +</pre> + +<h2 id="エラーの種類">エラーの種類</h2> + +<p>{{jsxref("TypeError")}}.</p> + +<h2 id="What_went_wrong" name="What_went_wrong">エラーの原因</h2> + +<p>関数でないものを、関数呼び出ししようとした際に発生するエラーです。また適切な関数が定義されていることを期待されているが、定義されていない場合も発生します。</p> + +<p>関数名のタイプミスをしていないか確認してみましょう。また、呼び出そうとしてるオブジェクトがそのメソッドを持っているかどうかも確認してみてください。配列オブジェクトが持っている <code>map</code> 関数を、それを持たない通常のオブジェクトに対して呼び出そうとしている場合が、後者の例になります。</p> + +<p>多くの組み込み関数はコールバック関数を必要とします。これらのメソッドを正しく呼び出すためには、関数を引数に指定する必要があります:</p> + +<ul> + <li>{{jsxref("Array")}} もしくは {{jsxref("TypedArray")}} オブジェクトを操作する場合: + <ul> + <li>{{jsxref("Array.prototype.every()")}}, {{jsxref("Array.prototype.some()")}}, {{jsxref("Array.prototype.forEach()")}}, {{jsxref("Array.prototype.map()")}}, {{jsxref("Array.prototype.filter()")}}, {{jsxref("Array.prototype.reduce()")}}, {{jsxref("Array.prototype.reduceRight()")}}, {{jsxref("Array.prototype.find()")}}</li> + </ul> + </li> + <li> {{jsxref("Map")}} もしくは {{jsxref("Set")}} を操作する場合: + <ul> + <li>{{jsxref("Map.prototype.forEach()")}}, {{jsxref("Set.prototype.forEach()")}}</li> + </ul> + </li> +</ul> + +<h2 id="このエラーを起こすコードの例">このエラーを起こすコードの例</h2> + +<h3 id="関数名のタイプミス">関数名のタイプミス</h3> + +<p>次のように関数名を間違っている場合に発生します。なおこのミスは非常に多く発生します:</p> + +<pre class="brush: js example-bad">var x = document.getElementByID("foo"); +// TypeError: document.getElementByID is not a function +</pre> + +<p>正しい関数名は <code>getElementByI<strong>d</strong></code> です:</p> + +<pre class="brush: js example-good">var x = document.getElementById("foo"); +</pre> + +<h3 id="間違ったオブジェクトに対する関数呼び出し">間違ったオブジェクトに対する関数呼び出し</h3> + +<p>いくつかのメソッドは、引数に関数が指定されていることを期待していて、しかも特定のオブジェクトの上でのみ正しく動作するものがあります。この典型例が {{jsxref("Array.prototype.map()")}} で、これは {{jsxref("Array")}} オブジェクトでのみ正しく動作します。</p> + +<pre class="brush: js example-bad">var obj = { a: 13, b: 37, c: 42 }; + +obj.map(function(num) { + return num * 2; +}); + +// TypeError: obj.map is not a function</pre> + +<p>オブジェクトではなく、配列を利用しましょう:</p> + +<pre class="brush: js example-good">var numbers = [1, 4, 9]; + +numbers.map(function(num) { + return num * 2; +}); + +// Array [ 2, 8, 18 ] +</pre> + +<h3 id="Function_shares_a_name_with_a_pre-existing_property" name="Function_shares_a_name_with_a_pre-existing_property">すでに存在するプロパティと名前を共有する関数</h3> + +<p>クラスを作るとき、時々プロパティと関数が同じ名前であることがあります。関数を呼び出すと、コンパイラーは関数が存在するのをやめたように考えます。</p> + +<pre><code>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</code></pre> + +<p>代わりに異なるプロパティ名を使ってください:</p> + +<pre><code>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' }</code></pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Functions">Functions</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<p>JavaScript の例外 "<em>variable</em> is not defined" は、どこかで参照している変数が存在しない場合に発生します。</p> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox notranslate">ReferenceError: "x" is not defined +</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>{{jsxref("ReferenceError")}}.</p> + +<h2 id="What_went_wrong" name="What_went_wrong">原因</h2> + +<p>どこかで存在しない変数を参照しています。この変数を宣言しておくか、現在のスクリプトまたは<a href="/ja/docs/Glossary/scope">スコープ</a>で利用可能であることを確認する必要があります。</p> + +<div class="note"> +<p><strong>メモ:</strong> ライブラリ (jQuery など) を読み込むとき、ライブラリの変数、例えば "$" にアクセスする前に読み込みが行われるかを確認してください。ライブラリを読み込む {{HTMLElement("script")}} 要素は、それを使用するコードよりも前に置いてください。</p> +</div> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Variable_not_declared" name="Variable_not_declared">宣言されていない変数</h3> + +<pre class="brush: js example-bad notranslate">foo.substring(1); // ReferenceError: foo is not defined +</pre> + +<p>"foo" と言う変数はどこにも宣言されていません。これは文字列である必要があり、それならば {{jsxref("String.prototype.substring()")}} メソッドが動作します。</p> + +<pre class="brush: js example-good notranslate">var foo = 'bar'; +foo.substring(1); // "ar"</pre> + +<h3 id="Wrong_scope" name="Wrong_scope">スコープの間違い</h3> + +<p>変数は現在の実行コンテキストで利用可能である必要があります。<a href="/ja/docs/Web/JavaScript/Reference/Functions">関数</a>の中で定義された変数は、その関数のスコープ内でしか定義されていないので、関数の外のどこからもアクセスできません。</p> + +<pre class="brush: js example-bad notranslate">function numbers() { + var num1 = 2, + num2 = 3; + return num1 + num2; +} + +console.log(num1); // ReferenceError num1 is not defined.</pre> + +<p>しかし、関数はそれが定義されたスコープ内で定義されたすべての変数と関数にアクセスすることができます。言い換えれば、グローバルスコープで定義された関数は、グローバルスコープ内で定義されたすべての変数にアクセスすることができます。/p></p> + +<pre class="brush: js example-good notranslate">var num1 = 2, + num2 = 3; + +function numbers() { + return num1 + num2; +} + +console.log(numbers()); // 5</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li><a href="/ja/docs/Glossary/Scope">Scope</a></li> + <li><a href="/ja/docs/Web/JavaScript/Guide/Grammar_and_types#Declaring_variables">変数の宣言 (JavaScript ガイド)</a></li> + <li><a href="/ja/docs/Web/JavaScript/Guide/Functions#Function_scope/en-US/docs/">関数のスコープ (JavaScript ガイド)</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">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) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("RangeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>これらのメソッドのいずれかで、 範囲外の精度を引数を使用しています:</p> + +<ul> + <li>{{jsxref("Number.prototype.toExponential()")}}</li> + <li>{{jsxref("Number.prototype.toFixed()")}}</li> + <li>{{jsxref("Number.prototype.toPrecision()")}}</li> +</ul> + +<p>これらのメソッドで許可されている範囲は、通常 0 と 20(または 21)の間です。しかし、ECMAScript 仕様では、この範囲の拡張が認められています。</p> + +<table class="standard-table"> + <thead> + <tr> + <th scope="col">メソッド</th> + <th scope="col">Firefox (SpiderMonkey</th> + <th scope="col">Chrome, Opera (V8)</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{jsxref("Number.prototype.toExponential()")}}</td> + <td>0 から 100</td> + <td>0 から 20</td> + </tr> + <tr> + <td>{{jsxref("Number.prototype.toFixed()")}}</td> + <td>-20 から 100</td> + <td>0 から 20</td> + </tr> + <tr> + <td>{{jsxref("Number.prototype.toPrecision()")}}</td> + <td>1 から 100</td> + <td>1 から 21</td> + </tr> + </tbody> +</table> + +<h2 id="例">例</h2> + +<h3 id="無効なケース">無効なケース</h3> + +<pre class="brush: js example-bad">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 +</pre> + +<h3 id="有効なケース">有効なケース</h3> + +<pre class="brush: js example-good">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 +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("Number.prototype.toExponential()")}}</li> + <li>{{jsxref("Number.prototype.toFixed()")}}</li> + <li>{{jsxref("Number.prototype.toPrecision()")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<p>JavaScript の例外 "Permission denied to access property" は、権限がない状態でオブジェクトへのアクセスの試行があった場合に発生します。</p> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox notranslate">Error: Permission denied to access property "x" +</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>{{jsxref("Error")}}</p> + +<h2 id="What_went_wrong" name="What_went_wrong">原因</h2> + +<p>権限がない状態でオブジェクトへのアクセスの試行がありました。これは異なるドメインから読み込んだ {{HTMLElement("iframe")}} 要素が<a href="/ja/docs/Web/Security/Same-origin_policy">同一オリジンポリシー</a>に違反する場合などです。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="No_permission_to_access_document" name="No_permission_to_access_document">文書にアクセスする権限がない</h3> + +<pre class="brush: html notranslate"><!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></pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{HTMLElement("iframe")}}</li> + <li><a href="/ja/docs/Web/Security/Same-origin_policy">同一オリジンポリシー</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">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) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>値を割り当てようとしたグローバル変数、またはオブジェクトのプロパティが読み取り専用プロパティです。(技術的には、 <a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty#Writable_attribute">non-writable データプロパティ</a> です。)</p> + +<p>このエラーは、<a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モードコード</a> のときにだけ発生します。strict コードではない場合、割り当ては無視されるだけです。</p> + +<h2 id="例">例</h2> + +<h3 id="無効なケース">無効なケース</h3> + +<p>読み取り専用プロパティはさほど一般的ではありませんが、 {{jsxref("Object.defineProperty()")}}、または {{jsxref("Object.freeze()")}} を使用して生成できます。</p> + +<pre class="brush: js example-bad">"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 +</pre> + +<p>JavaScript のビルトインにも、いくつか読み取り専用プロパティがあります。 Math の定数を再定義しようとしたとします。</p> + +<pre class="brush: js example-bad">"use strict"; +Math.PI = 4; // TypeError +</pre> + +<p>残念ながらできません。</p> + +<p>グローバル変数の <code>undefined</code> も読み取り専用のため、このようにすると悪名高い "undefined is not a function" エラーが発生します:</p> + +<pre class="brush: js example-bad">"use strict"; +undefined = function () {}; // TypeError: "undefined" is read-only +</pre> + +<h3 id="有効なケース">有効なケース</h3> + +<pre class="brush: js example-good">"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 (解剖学的にはおかしいけれども) +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("Object.defineProperty()")}}</li> + <li>{{jsxref("Object.freeze()")}}</li> + <li><a href="https://www.answers.com/Q/Which_animals_have_three_lungs">"Which animals have three lungs?" on answers.com</a></li> + <li><a href="https://aliens.wikia.com/wiki/Klingon">Klingons</a> (問いへの別解)</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<p>JavaScript の例外 "redeclaration of formal parameter" は、関数の引数名としてある変数名が発生した後、関数本体内の {{jsxref("Statements/let", "let")}} 代入文を使用して同じ変数名を再度宣言すると発生します。</p> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox notranslate">SyntaxError: Let/Const redeclaration (Edge) +SyntaxError: redeclaration of formal parameter "x" (Firefox) +SyntaxError: Identifier "x" has already been declared (Chrome) +</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="What_went_wrong" name="What_went_wrong">エラーの原因</h2> + +<p>関数の引数と同名の変数があり、関数内で再度 {{jsxref("Statements/let", "let")}} 代入文を使用して再宣言しています。 JavaScript では、同じ関数内やブロックスコープ内で <code>let</code> を使用して同じ変数を再宣言できません。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Redeclared_argument" name="Redeclared_argument">再宣言した引数</h3> + +<p>この場合、変数 "arg" は、引数を再宣言しています。</p> + +<pre class="brush: js example-bad notranslate">function f(arg) { + let arg = 'foo'; +} + +// SyntaxError: redeclaration of formal parameter "arg" +</pre> + +<p>関数の本体内で "arg" の値を変更したい場合、これを行うことはできますが、再び同じ変数を宣言する必要はありません。言い換えれば、 <code>let</code> キーワードを省略することができます。新しい変数を生成する場合は、既存の関数の引数と競合するので、変数名を変更する必要があります。</p> + +<pre class="brush: js example-good notranslate">function f(arg) { + arg = 'foo'; +} + +function f(arg) { + let bar = 'foo'; +} +</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Statements/let", "let")}}</li> + <li>{{jsxref("Statements/const", "const")}}</li> + <li>{{jsxref("Statements/var", "var")}}</li> + <li><a href="/ja/docs/Web/JavaScript/Guide">JavaScript ガイド</a> 内の <a href="/ja/docs/Web/JavaScript/Guide/Grammar_and_Types#Declarations">宣言</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">TypeError: reduce of empty array with no initial value +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>JavaScript には、複数の reduce 関数があります:</p> + +<ul> + <li>{{jsxref("Array.prototype.reduce()")}}、{{jsxref("Array.prototype.reduceRight()")}} と</li> + <li>{{jsxref("TypedArray.prototype.reduce()")}}、{{jsxref("TypedArray.prototype.reduceRight()")}})。</li> +</ul> + +<p>これらの関数は、オプションとして (最初に <code>callback</code> が呼び出される際の最初の引数として使用される) <code>initialValue</code> を受け取ります。しかし、初期値を提供しない場合は、{{jsxref("Array")}} や {{jsxref("TypedArray")}} の最初の要素が初期値として使用されます。空の配列が提供されて初期値を取得できない場合にこのエラーが発生します。</p> + +<h2 id="例">例</h2> + +<h3 id="無効なケース">無効なケース</h3> + +<p>この問題は、しばしばリストのすべての要素を取り除くフィルター ({{jsxref("Array.prototype.filter()")}}、{{jsxref("TypedArray.prototype.filter()")}}) で結合した際に発生します。したがって、初期値がないまま使用することになります。</p> + +<pre class="brush: js example-bad">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.</pre> + +<p>似たようなケースとして、セレクターに typo がある場合やリストに予想外の数の要素がある場合に同様の問題が発生します:</p> + +<pre class="brush: js example-bad">var names = document.getElementsByClassName("names"); +var name_list = Array.prototype.reduce.call(names, (acc, name) => acc + ", " + name); +</pre> + +<h3 id="有効なケース">有効なケース</h3> + +<p>これらの問題は、2 つの異なる方法で解決できます。</p> + +<p>1 つ目の方法は、<code>initialValue</code> を提供することです; 加算の場合には 0、乗算の場合には 1、文字連結の場合は空文字など、その操作にとって自然な値を指定します。</p> + +<pre class="brush: js example-good">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 +</pre> + +<p>もう 1 つの方法は、<code>reduce</code> を呼び出す前、または予期しないダミーの初期値を追加した後にコールバックで空のケースを処理する 2 つの方法です。</p> + +<pre class="brush: js example-good">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. +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("Array.prototype.reduce()")}}</li> + <li>{{jsxref("Array.prototype.reduceRight()")}}</li> + <li>{{jsxref("TypedArray.prototype.reduce()")}}</li> + <li>{{jsxref("TypedArray.prototype.reduceRight()")}}</li> + <li>{{jsxref("Array")}}</li> + <li>{{jsxref("TypedArray")}}</li> + <li>{{jsxref("Array.prototype.filter()")}}</li> + <li>{{jsxref("TypedArray.prototype.filter()")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: "x" is a reserved identifier (Firefox) +SyntaxError: Unexpected reserved word (Chrome)</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Lexical_grammar#キーワード">予約語</a>を識別子として使用した場合、エラーをスローします。これらは strict モードと通常モードの双方で予約されています:</p> + +<ul> + <li><code>enum</code></li> +</ul> + +<p>次のものは strict モードのコードでのみ予約されています:</p> + +<ul class="threecolumns"> + <li><code>implements</code></li> + <li><code>interface</code></li> + <li>{{jsxref("Statements/let", "let")}}</li> + <li><code>package</code></li> + <li><code>private</code></li> + <li><code>protected</code></li> + <li><code>public</code></li> + <li><code>static</code></li> +</ul> + +<h2 id="例">例</h2> + +<h3 id="Strict_モードと_非_Strict_モードで予約されているキーワード">Strict モードと 非 Strict モードで予約されているキーワード</h3> + +<p><code>enum</code> 識別子は全般的に予約されています。</p> + +<pre class="brush: js example-bad">var enum = { RED: 0, GREEN: 1, BLUE: 2 }; +// SyntaxError: enum is a reserved identifier +</pre> + +<p>strict モードのコードでは、より多くの識別子が予約されています。</p> + +<pre class="brush: js example-bad">"use strict"; +var package = ["potatoes", "rice", "fries"]; +// SyntaxError: package is a reserved identifier +</pre> + +<p>これらの変数名を変更する必要があります。</p> + +<pre class="brush: js example-good">var colorEnum = { RED: 0, GREEN: 1, BLUE: 2 }; +var list = ["potatoes", "rice", "fries"];</pre> + +<h3 id="古いブラウザーを更新する">古いブラウザーを更新する</h3> + +<p>たとえば、<code><a href="/ja/docs/Web/JavaScript/Reference/Statements/let">let</a></code> や <code><a href="/ja/docs/Web/JavaScript/Reference/Statements/class">class</a></code> をまだ実装していない古いブラウザーを使用している場合、それらの新しい言語機能をサポートしているより新しいブラウザーにアップデートすべきです。</p> + +<pre class="brush: js">"use strict"; +class DocArchiver {} + +// SyntaxError: class is a reserved identifier +// (たとえば、Firefox 44 以前の古いブラウザーはエラーをスローします) +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="http://wiki.c2.com/?GoodVariableNames">Good variable names</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">RangeError: repeat count must be less than infinity and not overflow maximum string size (Firefox) + +RangeError: Invalid count value (Chrome) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("RangeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>{{jsxref("String.prototype.repeat()")}} メソッドを使用します。<code>count</code> パラメーターは、文字列の繰り返し回数を指定します。 これは 0 から正の {{jsxref("Infinity")}} 以下の値である必要があり、負数は使用できません。有効値の範囲はこのように表現できます: [0, +∞)。</p> + +<p>結果の文字列は、文字列サイズの最大値以上にはできません。これは JavaScript エンジンによって異なります。 Firefox(SpiderMonkey) の最大文字列数hは、 2<sup>28</sup> -1 (<code>0xFFFFFFF)</code>です。</p> + +<h2 id="例">例</h2> + +<h3 id="無効なケース">無効なケース</h3> + +<pre class="brush: js example-bad">'abc'.repeat(Infinity); // RangeError +'a'.repeat(2**28); // RangeError +</pre> + +<h3 id="有効なケース">有効なケース</h3> + +<pre class="brush: js example-good">'abc'.repeat(0); // '' +'abc'.repeat(1); // 'abc' +'abc'.repeat(2); // 'abcabc' +'abc'.repeat(3.5); // 'abcabcabc' (count は整数に変換されます) +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("String.prototype.repeat()")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<p>JavaScript の警告 "unreachable code after return statement" は、 {{jsxref("Statements/return", "return")}} 文の後で式を使用したり、セミコロンのない return 文を使用して、その直後に式を置いたりした場合に発生します。</p> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox">Warning: unreachable code after return statement (Firefox) +</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>警告</p> + +<h2 id="What_went_wrong" name="What_went_wrong">原因</h2> + +<p>unreachable code after a return statement は、以下のような場合に発生することがあります。</p> + +<ul> + <li>{{jsxref("Statements/return", "return")}} 文の後で式を使用している場合</li> + <li>セミコロンがない return 文の直後に式を置いている場合</li> +</ul> + +<p>有効な <code>return</code> 文の後に式がある場合、警告は <code>return</code> 文の後のコードには到達しない、つまり決して実行されないことを表します。</p> + +<p><code>return</code> 文の後にセミコロンをつけるべきなのはなぜでしょうか。セミコロンがない <code>return</code> 文の場合、開発者が次の行にある文を返そうとしているのか、処理を停止して戻ろうとしているのかが不明確になってしまいます。この警告は、 <code>return</code> 文の書かれ方にあいまいさがあることを示しています。</p> + +<p>以下の文の場合、セミコロンがない場合の return の警告は表示されません。</p> + +<ul> + <li>{{jsxref("Statements/throw", "throw")}}</li> + <li>{{jsxref("Statements/break", "break")}}</li> + <li>{{jsxref("Statements/var", "var")}}</li> + <li>{{jsxref("Statements/function", "function")}}</li> +</ul> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Invalid_cases" name="Invalid_cases">無効な場合</h3> + +<pre class="brush: js example-bad">function f() { + var x = 3; + x += 4; + return x; // return は直ちに関数を終了します。 + x -= 3; // そのため、この行は実行されません。到達不可能です。 +} + +function f() { + return // これは `return;` のように扱われます。 + 3 + 4; // そのため、関数を抜け出し、この行には決して到達しません。 +} +</pre> + +<h3 id="Valid_cases" name="Valid_cases">妥当な場合</h3> + +<pre class="brush: js example-good">function f() { + var x = 3; + x += 4; + x -= 3; + return x; // OK: すべての式の後に return があります。 +} + +function f() { + return 3 + 4 // OK: 同じ行に式があるセミコロンなしの return です。 +} +</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("Statements/return", "自動セミコロン挿入", "#Automatic_Semicolon_Insertion", 1)}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">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 +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>次の引数のうちいずれかを持つ関数の先頭に <code>"use strict"</code> ディレクティブが書かれています:</p> + +<ul> + <li>{{jsxref("Functions/Default_parameters", "Default parameters", "", 1)}}</li> + <li>{{jsxref("Functions/rest_parameters", "Rest parameters", "", 1)}}</li> + <li>{{jsxref("Operators/Destructuring_assignment", "Destructuring parameters", "", 1)}}</li> +</ul> + +<p>ECMAScript 仕様に則って、このような関数の先頭では <code>"use strict"</code> を使用できません。</p> + +<h2 id="例">例</h2> + +<h3 id="Function_ステートメント">Function ステートメント</h3> + +<p>このケースでは、関数 <code>sum</code> は既定値を持つ引数 <code>a=1</code> と <code>b=2</code> を持っています:</p> + +<pre class="brush: js example-bad">function sum(a=1, b=2) { + // SyntaxError: "use strict" not allowed in function with default parameter + "use strict"; + return a + b; +} +</pre> + +<p>関数を <a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a>にしたい、かつスクリプト全体、またはエンクロージャー関数が strict モードになってもよいなら、<code>"use strict"</code> ディレクティブを関数の外側に移動できます:</p> + +<pre class="brush: js example-good">"use strict"; +function sum(a=1, b=2) { + return a + b; +} +</pre> + +<h3 id="Function_式">Function 式</h3> + +<p>function 式では、別の回避策をとることができます:</p> + +<pre class="brush: js example-bad">var sum = function sum([a, b]) { + // SyntaxError: "use strict" not allowed in function with destructuring parameter + "use strict"; + return a + b; +}; +</pre> + +<p>これは、次の式に変換できます:</p> + +<pre class="brush: js example-good">var sum = (function() { + "use strict"; + return function sum([a, b]) { + return a + b; + }; +})(); +</pre> + +<h3 id="アロー関数">アロー関数</h3> + +<p>アロー関数が <code>this</code> 変数にアクセスする必要がある場合、アロー関数をエンクロージャー関数として使用できます:</p> + +<pre class="brush: js example-bad">var callback = (...args) => { + // SyntaxError: "use strict" not allowed in function with rest parameter + "use strict"; + return this.run(args); +}; +</pre> + +<p>これは、次の式に変換できます:</p> + +<pre class="brush: js example-good">var callback = (() => { + "use strict"; + return (...args) => { + return this.run(args); + }; +})(); +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li>{{jsxref("Strict_mode", "Strict mode", "", 1)}}</li> + <li>{{jsxref("Statements/function", "function statement", "", 1)}}</li> + <li>{{jsxref("Operators/function", "function expression", "", 1)}}</li> + <li>{{jsxref("Functions/Default_parameters", "Default parameters", "", 1)}}</li> + <li>{{jsxref("Functions/rest_parameters", "Rest parameters", "", 1)}}</li> + <li>{{jsxref("Operators/Destructuring_assignment", "Destructuring parameters", "", 1)}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox">Error: Out of stack space (Edge) +InternalError: too much recursion (Firefox) +RangeError: Maximum call stack size exceeded (Chrome) +</pre> + +<h2 id="Error_Type" name="Error_Type">エラーの種類</h2> + +<p>{{jsxref("InternalError")}}。</p> + +<h2 id="What_went_wrong" name="What_went_wrong">エラーの原因</h2> + +<p>自分自身を呼び出す関数は<em>再帰関数</em>と呼ばれます。ある条件を満たすと、関数は自分自身を呼び出すのをやめます。これは<em>基礎ケース</em>と呼ばれます。</p> + +<p>いくつかの点で、再帰はループに似ています。両方とも、同じコードを複数回実行し、 (無限ループまたは無限再帰を避けるために) 条件を必要とします。<span class="seoSummary">関数の再帰呼び出しが深すぎる場合、または関数が基礎ケースを欠いている場合、 JavaScript はこのエラーを発生します。</span></p> + +<h2 id="Examples" name="Examples">例</h2> + +<p>終了条件に従って、この再帰関数は 10 回実行されます。</p> + +<pre class="brush: js">function loop(x) { + if (x >= 10) // "x >= 10" は終了条件 + return; + // 何かを実行 + loop(x + 1); // 再帰呼び出し +} +loop(0);</pre> + +<p>この条件に、非常に大きい値を設定すると動作しません。</p> + +<pre class="brush: js example-bad">function loop(x) { + if (x >= 1000000000000) + return; + // 何かを実行 + loop(x + 1); +} +loop(0); + +// InternalError: too much recursion</pre> + +<p>この再帰関数は基礎ケースを欠いています。脱出条件がないため、この関数は自分自身を無限に呼び出し続けます。</p> + +<pre class="brush: js example-bad">function loop(x) { + // The base case is missing + +loop(x + 1); // 再帰呼び出し +} + +loop(0); + +// InternalError: too much recursion</pre> + +<h3 id="Class_error_too_much_recursion" name="Class_error_too_much_recursion">Class error: too much recursion</h3> + +<pre class="brush: js example-bad">class Person{ + constructor(){} + set name(name){ + this.name = name; // 再帰呼び出し + } +} + + +const tony = new Person(); +tony.name = "Tonisha"; // InternalError: too much recursion +</pre> + +<p>値がプロパティ name に代入されるとき (this.name = name;) JavaScript はプロパティを設定する必要があります。これが発生すると、セッター関数が呼び出されます。</p> + +<pre class="brush: js example-bad">set name(name){ + this.name = name; // 再帰呼び出し +} +</pre> + +<div class="note"> +<p>この例では、セッターが呼び出されたとき、同じことを再度行うように指示されます。<em>つまり、処理しているのと同じプロパティに設定します。</em>これにより、関数は何度も何度も自分自身を呼び出し、無限に再帰が行われます。</p> +</div> + +<p>この問題は同じ変数がゲッターに使用される場合にも発生します。</p> + +<pre class="brush: js example-bad">get name(){ + return this.name; // 再帰呼び出し +} +</pre> + +<p>この問題を防ぐには、セッター関数の内部で代入しようとしているプロパティが、もともとセッターを起動したものと異なっていることを確認してください。同じことがゲッターにも言えます。</p> + +<pre class="brush: js">class Person{ + constructor(){} + set name(name){ + this._name = name; + } + get name(){ + return this._name; + } +} +const tony = new Person(); +tony.name = "Tonisha"; +console.log(tony); +</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{Glossary("Recursion", "再帰")}}</li> + <li><a href="/ja/docs/Web/JavaScript/Guide/Functions#Recursion">再帰関数</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">TypeError: invalid arguments (Firefox)</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("TypeError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>新しい typed array を生成するために、<a href="/ja/docs/Web/JavaScript/Typed_arrays">Typed array</a> コンストラクターに以下のいずれかの値を渡す必要があります。</p> + +<ul> + <li>長さ</li> + <li>ほかの typed array</li> + <li>配列状オブジェクト</li> + <li>反復可能オブジェクト</li> + <li>{{jsxref("ArrayBuffer")}} オブジェクト</li> +</ul> + +<p>そのほかのコンストラクター引数では、有効な typed array を生成できません。</p> + +<h2 id="例">例</h2> + +<p>Typed array、たとえば {{jsxref("Uint8Array")}} は文字列から構成できません。事実、文字列はまったく typed array にすることはできません。</p> + +<pre class="brush: js example-bad">var ta = new Uint8Array("nope"); +// TypeError: invalid arguments +</pre> + +<p>有効な {{jsxref("Uint8Array")}} を生成するほかの方法:</p> + +<pre class="brush: js example-good">// 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] +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Typed_arrays">Typed array</a></li> + <li>{{jsxref("ArrayBuffer")}}</li> + <li>{{jsxref("Uint8Array")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">ReferenceError: assignment to undeclared variable "x" (Firefox) +ReferenceError: "x" is not defined (Chrome) +ReferenceError: Variable undefined in strict mode (Edge) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a> でのみ、{{jsxref("ReferenceError")}} の警告が出ます。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>宣言していない変数に値を割り当てています。つまり、<code><a href="/ja/docs/Web/JavaScript/Reference/Statements/var">var</a></code> キーワードを使用せずに割り当てをしています。 宣言した変数と宣言していない変数の間には、予想外の結果を招くいくつかの違いがあります。それが、strict モードで JavaScript がエラーを発生させる理由です。</p> + +<p>宣言した変数と宣言していない変数について、3 つの注意点があります:</p> + +<ul> + <li>宣言した変数は、それが宣言された実行コンテキストに制限されます。.宣言していない変数は常にグローバルです。</li> + <li>宣言した変数は、コードが実行される前に生成されます。宣言していない変数は、それに割り当てるコードが実行されるまで存在しません。</li> + <li>宣言した変数は、その実行コンテキスト(関数かグローバル)で設定不可能なプロパティです。 宣言していない変数は、設定可能です(たとえば、削除できます)。</li> +</ul> + +<p>詳細や具体例は、<code><a href="/ja/docs/Web/JavaScript/Reference/Statements/var">var</a></code> 参照ページを見てください。</p> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モードのコード</a> でのみ、宣言していない変数割り当てエラーが発生します。非 strict コードでは、それらは暗黙裡に無視されます。</p> + +<h2 id="例">例</h2> + +<h3 id="無効なケース">無効なケース</h3> + +<p>このケースでは、変数 "bar" は宣言していない変数です。</p> + +<pre class="brush: js example-bad">function foo() { + "use strict"; + bar = true; +} +foo(); // ReferenceError: assignment to undeclared variable bar +</pre> + +<h3 id="有効なケース">有効なケース</h3> + +<p>"bar" を宣言した変数にするために、"bar" の前に、<code><a href="/ja/docs/Web/JavaScript/Reference/Statements/var">var</a></code> キーワードを追加します。</p> + +<pre class="brush: js example-good">function foo() { + "use strict"; + var bar = true; +} +foo();</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">Strict モード</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">ReferenceError: reference to undefined property "x" (Firefox) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a> でのみ、{{jsxref("ReferenceError")}} の警告が出ます。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>存在しないオブジェクトのプロパティにアクセスしようとしています。プロパティにアクセスする方法は 2 つあります。詳細については、<a href="/ja/docs/Web/JavaScript/Reference/Operators/Property_Accessors">メンバー演算子</a>参照ページを見てください。</p> + +<p>未定義プロパティを参照することによるエラーは、<a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モードのコード</a>でのみ発生します。非 strict コードでは、暗黙的に無視されます。</p> + +<h2 id="例">例</h2> + +<h3 id="無効なケース">無効なケース</h3> + +<p>このケースでは、"bar" は未定義のプロパティです。</p> + +<pre class="brush: js example-bad">"use strict"; + +var foo = {}; +foo.bar; // ReferenceError: reference to undefined property "bar" +</pre> + +<h3 id="有効なケース">有効なケース</h3> + +<p>エラーを避けるには、"bar" プロパティを定義するか、使用する前に "bar" プロパティが存在するか確認する必要があります(たとえば、{{jsxref("Object.prototype.hasOwnProperty()")}} メソッドを使用します)。</p> + +<pre class="brush: js example-good">"use strict"; + +var foo = {}; + +foo.bar = "moon"; +console.log(foo.bar); // "moon" + +if (foo.hasOwnProperty("bar") { + console.log(foo.bar); +}</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">Strict モード</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox">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" +</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="What_went_wrong" name="What_went_wrong">エラーの原因</h2> + +<p>特定の言語構造が予想されている箇所に、ほかのものが提供されています。これは単純なタイプミスの可能性があります。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Expression_expected" name="Expression_expected">式が期待される</h3> + +<p>たとえば関数を呼び出すとき、末尾のカンマは許可されていません。</p> + +<pre class="brush: js example-bad">for (let i = 0; i < 5,; ++i) { + console.log(i); +} +// SyntaxError: expected expression, got ')' +</pre> + +<p>正しくは、カンマを省略するか、他の式を追加するかしてください。</p> + +<pre class="brush: js example-good">for (let i = 0; i < 5; ++i) { + console.log(i); +} +</pre> + +<h3 id="Not_enough_brackets" name="Not_enough_brackets">括弧の不足</h3> + +<p>時々、 <code>if</code> 文を囲む括弧を忘れることがあります。</p> + +<pre class="brush: js example-bad line-numbers language-js">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 '||'</pre> + +<p>最初は括弧が正しく見えますが、 <code>||</code> が括弧の外にあることに注意してください。 <code>||</code> の周囲を括弧で囲むように修正してください。</p> + +<pre class="brush: js example-good">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; + } +} +</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("SyntaxError")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<p>JavaScript の例外 "<em>x</em> is (not) <em>y</em>" は、予期しない型があったときに発生します。よくあるのは、予期せず {{jsxref("undefined")}} または {{jsxref("null")}} の値があった場合です。</p> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox notranslate">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 +</pre> + +<h2 id="Error_type" name="Error_type">エラー種別</h2> + +<p>{{jsxref("TypeError")}}。</p> + +<h2 id="What_went_wrong" name="What_went_wrong">エラーの原因</h2> + +<p>予期しない型がありました。これは {{jsxref("undefined")}} または {{jsxref("null")}} の値でしばしば発生します。</p> + +<p>また、{{jsxref("Object.create()")}} や {{jsxref("Symbol.keyFor()")}} のようなある種のメソッドは、特定の型を要求し、それを提供する必要があります。</p> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Invalid_cases" name="Invalid_cases">無効な場合</h3> + +<pre class="brush: js example-bad notranslate">// 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 +</pre> + +<h3 id="Fixing_the_issue" name="Fixing_the_issue">問題の修正</h3> + +<p>null ポインターを <code>undefined</code> 値に修正するには、次のように <a href="/ja/docs/Web/JavaScript/Reference/Operators/typeof">typeof</a> 演算子を用いて行うことができます。</p> + +<pre class="brush: js notranslate">if (foo !== undefined) { + // これで、 foo が定義されていることがわかるので、実行することができます。 +} + +if (typeof foo !== 'undefined') { + // 同じというのは良い考えですが、この実装を使わないでください。 - 本当の + // undefined の値と未宣言の変数が混同されて問題が発生する可能性があります。 +} +</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("undefined")}}</li> + <li>{{jsxref("null")}}</li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: function statement requires a name [Firefox] +SyntaxError: Unexpected token ( [Chrome] +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>コードに名前が必要な <a href="/ja/docs/Web/JavaScript/Reference/Statements/function">function ステートメント</a>があります。関数がどのように定義されているか、関数の名前を指定する必要があるかどうか、または問題の関数が関数式、{{Glossary("IIFE")}} である必要があるかどうか、 コードがこのコンテクストに正しく置かれているかどうかを確認する必要があります。</p> + +<h2 id="例">例</h2> + +<h3 id="ステートメント_vs_式">ステートメント vs 式</h3> + +<p><em><a href="/ja/docs/Web/JavaScript/Reference/Statements/function">function ステートメント</a></em> (または <em>function 宣言</em>) では名前が必要であり、これは動作しません:</p> + +<pre class="brush: js example-bad">function () { + return 'Hello world'; +} +// SyntaxError: function statement requires a name +</pre> + +<p>代わりに、<a href="/ja/docs/Web/JavaScript/Reference/Operators/function">function 式</a> (代入) を使用できます:</p> + +<pre class="brush: js example-good">var greet = function() { + return 'Hello world'; +};</pre> + +<p>または、定義するとすぐに実行される <a href="https://en.wikipedia.org/wiki/Immediately-invoked_function_expression">IIFE</a> (即時実行関数式) を定義しようとしているのかもしれません。その場合は、もう少々括弧が必要です:</p> + +<pre class="brush: js example-good">(function () { + +})();</pre> + +<h3 id="ラベル付けされた関数">ラベル付けされた関数</h3> + +<p>関数 <a href="/ja/docs/Web/JavaScript/Reference/Statements/label">label</a> を使用している場合、<code>function</code> キーワードの後に関数名を指定する必要があります。これは動作しません:</p> + +<pre class="brush: js example-bad">function Greeter() { + german: function () { + return "Moin"; + } +} +// SyntaxError: function statement requires a name +</pre> + +<p>たとえば、これは動作します:</p> + +<pre class="brush: js example-good">function Greeter() { + german: function g() { + return "Moin"; + } +}</pre> + +<h3 id="オブジェクトのメソッド">オブジェクトのメソッド</h3> + +<p>オブジェクトのメソッドを作るならば、オブジェクトを作る必要があります。その場合、<code>function</code> キーワードの後に名前がない次の構文は有効です。</p> + +<pre class="brush: js example-good">var greeter = { + german: function () { + return "Moin"; + } +};</pre> + +<h3 id="コールバック構文">コールバック構文</h3> + +<p>コールバックを使用するときの構文もチェックします。大括弧とカンマが混同しやすいです。</p> + +<pre class="brush: js example-bad">promise.then( + function() { + console.log("success"); + }); + function() { + console.log("error"); +} +// SyntaxError: function statement requires a name +</pre> + +<p>正しくは:</p> + +<pre class="brush: json example-good">promise.then( + function() { + console.log("success"); + }, + function() { + console.log("error"); + } +); +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Guide/Functions">Functions in the JavaScript Guide</a></li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Statements/function">function statement</a></li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Operators/function">function expression</a></li> + <li><a href="https://en.wikipedia.org/wiki/Immediately-invoked_function_expression">IIFE</a></li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Statements/label">label</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="Message" name="Message">メッセージ</h2> + +<pre class="syntaxbox">SyntaxError: unterminated string literal +</pre> + +<h2 id="Error_type" name="Error_type">エラータイプ</h2> + +<p>{{jsxref("SyntaxError")}}</p> + +<h2 id="What_went_wrong" name="What_went_wrong">何がうまくいかなかったのか?</h2> + +<p>どこかに終端されていない {{jsxref("String")}} があります。文字列リテラルは、シングル(<code>'</code>)かダブル(<code>"</code>)のクオートで囲む必要があります。JavaScript は、シングルクオート文字列とダブルクオート文字列を区別しません。<a href="/ja/docs/Web/JavaScript/Reference/Global_Objects/String#エスケープシーケンス">エスケープシーケンス</a> はシングルクオートとダブルクオート、どちらの文字列でも動作します。このエラーを修正するためには、次の点をチェックしてください:</p> + +<ul> + <li>文字列リテラルのために、クオート(シングルかダブル)の開始と終了を行っている。</li> + <li>文字列リテラルを正しくエスケープしている。</li> + <li>文字列リテラルが複数行に分けられていない。</li> +</ul> + +<h2 id="Examples" name="Examples">例</h2> + +<h3 id="Multiple_lines" name="Multiple_lines">複数行</h3> + +<p>JavaScript では、次のように複数行にまたがる文字列を分割できません:</p> + +<pre class="brush: js example-bad">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</pre> + +<p>替わりに、<a href="/ja/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Addition">+ 演算子</a> かバックスラッシュ、<a href="/ja/docs/Web/JavaScript/Reference/Template_literals">template literal</a> を使用します。<code>+</code> 演算子だと、次のようになります:</p> + +<pre class="brush: js example-good">var longString = 'This is a very long string which needs ' + + 'to wrap across multiple lines because ' + + 'otherwise my code is unreadable.'; +</pre> + +<p>または、文字列が次のように続くことを示すために、各行の終わりにバックスラッシュ文字("\")を使用することもできます。バックスラッシュの後に、(改行を除いて)スペースや文字、インデントを入れないようにしてください。そうしないと動作しません。バックスラッシュの場合、次のようになります:</p> + +<pre class="brush: js example-good">var longString = 'This is a very long string which needs \ +to wrap across multiple lines because \ +otherwise my code is unreadable.'; +</pre> + +<p>ECMAScript 2015 環境でサポートされている <a href="/ja/docs/Web/JavaScript/Reference/Template_literals">template literal</a> を使っても改行可能です。</p> + +<pre class="brush: js example-good">var longString = `This is a very long string which needs + to wrap across multiple lines because + otherwise my code is unreadable.`;</pre> + +<h2 id="See_also" name="See_also">関連情報</h2> + +<ul> + <li>{{jsxref("String")}}</li> + <li><a href="/ja/docs/Web/JavaScript/Reference/Template_literals">Template literal</a></li> +</ul> 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 +--- +<div>{{jsSidebar("Errors")}}</div> + +<h2 id="メッセージ">メッセージ</h2> + +<pre class="syntaxbox">TypeError: variable "x" redeclares argument (Firefox) +</pre> + +<h2 id="エラータイプ">エラータイプ</h2> + +<p><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モード</a> でのみ、{{jsxref("TypeError")}} の警告がでます。</p> + +<h2 id="何がうまくいかなかったのか?">何がうまくいかなかったのか?</h2> + +<p>関数のパラメータとして使用されたものと同じ変数名が、関数のボディ内で <code><a href="/ja/docs/Web/JavaScript/Reference/Statements/var">var</a></code> 割り当てを使用して再宣言されています。これは命名が競合する可能性があるため、JavaScript が警告を発します。</p> + +<p>このエラーは、<a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">strict モードのコード</a> でのみ発生します。非 strict モードでは、再宣言は暗黙裡に無視されます。</p> + +<h2 id="例">例</h2> + +<h3 id="無効なケース">無効なケース</h3> + +<p>このケースでは、変数 "arg" 引数を再宣言しています。</p> + +<pre class="brush: js example-bad">"use strict"; + +function f(arg) { + var arg = "foo"; +} +</pre> + +<h3 id="有効なケース">有効なケース</h3> + +<p><code><a href="/ja/docs/Web/JavaScript/Reference/Statements/var">var</a></code> ステートメントを省略するだけで、この警告を修正できます。なぜなら、変数はすでに存在しているからです。そのほかの方法として、関数のパラメータか変数名をリネームすることもできます。</p> + +<pre class="brush: js example-good">"use strict"; + +function f(arg) { + arg = "foo"; +} +</pre> + +<h2 id="関連項目">関連項目</h2> + +<ul> + <li><a href="/ja/docs/Web/JavaScript/Reference/Strict_mode">Strict モード</a></li> +</ul> |