recursal/MDN huggingface dataset:
ReferenceError: assignment to undeclared variable "x"
=====================================================

JavaScript の strict モード独自の例外 "Assignment to undeclated variable" は、値が宣言されていない変数に代入されたときに発生します。

エラーメッセージ
--------


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

エラーの種類
------

strict モード でのみ、`ReferenceError` の警告が出ます。

エラーの原因
------

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

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

* 宣言した変数は、それが宣言された実行コンテキストに制限されます。宣言していない変数は常にグローバルです。
* 宣言した変数は、コードが実行される前に生成されます。宣言していない変数は、それに割り当てるコードが実行されるまで存在しません。
* 宣言した変数は、その実行コンテキスト (関数かグローバル) で設定不可能なプロパティです。 宣言していない変数は、設定可能です (たとえば、削除できます)。

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

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

例
-

### 無効なケース

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


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

### 有効な場合

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


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

関連情報
----

* Strict モード
SyntaxError: missing name after . operator
==========================================

JavaScript の例外 "missing name after . operator" は、プロパティアクセスのためのドット演算子 (`.`) の使い方に問題があった場合に発生します。

エラーメッセージ
--------


```js
SyntaxError: missing name after . operator
```

エラータイプ
------

`SyntaxError`何がうまくいかなかったのか？
--------------

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

例
-

### プロパティアクセス

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


```js
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
```


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


```js
obj.foo.bar; // "baz"
// or alternatively
obj["foo"]["bar"]; // "baz"

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

### プロパティアクセスと連結

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


```js
console.log("Hello" . "world");

// SyntaxError: missing name after . operator
```


連結のためにはプラス記号を使用してください。


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

関連項目
----

* メンバー演算子
SyntaxError: "use strict" not allowed in function with non-simple parameters
============================================================================

メッセージ
-----
```

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
```

エラーの種類
------

`SyntaxError`。

何がうまくいかなかったのか？
--------------

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

* Default parameters
* Rest parameters
* Destructuring parameters

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

例
-

### Function ステートメント

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


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


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


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

### Function 式

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


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


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


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

### アロー関数

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


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


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


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

関連項目
----

* Strict mode
* function statement
* function expression
* Default parameters
* Rest parameters
* Destructuring parameters
SyntaxError: missing variable name
==================================

JavaScript の例外 "missing variable name" は、開発者がよく経験するエラーです。入力間違いや変数名を忘れた場合によく発生します。

エラーメッセージ
--------


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

エラーの種類
------

`SyntaxError`エラーの原因
------

変数の名前がありません。原因は、タイプミスや変数名の忘れがほとんどです。変数名が `=` 記号の前に記載されていることを確認してください。

複数の変数を同時に宣言する場合は、前の行/宣言がセミコロンではなくカンマで終わっていないことを確認してください。

例
-

### 変数名を忘れている


```js
var = "foo";
```


分かりやすい変数名を考えることは、ほとんどの開発者にとって難しいことです。しかし、時間が経てば簡単になります。


```js
var description = "foo";
```

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

いくつか予約語である変数名があります。使用できません。ごめんね:(


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

### 複数の変数宣言

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


```js
var x, y = "foo",
var x, = "foo"

var first = document.getElementById('one'),
var second = document.getElementById('two'),

// SyntaxError: missing variable name
```


修正版は次の通りです。


```js
var x,
  y = "foo";
var x = "foo";

var first = document.getElementById("one");
var second = document.getElementById("two");
```

### 配列

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


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


正しくは次の通りです。


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

関連情報
----

* 良い変数名
* `var`
* JavaScript ガイドの変数の宣言
RangeError: invalid array length
================================

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

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

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

メッセージ
-----


```js
RangeError: invalid array length (Firefox)
RangeError: Invalid array length (Chromium-based)
RangeError: Array buffer allocation failed (Chromium-based)
```

エラーの種類
------

`RangeError`エラーの原因
------

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

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

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

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

例
-

### 不正なケース


```js
new Array(Math.pow(2, 40));
new Array(-1);
new ArrayBuffer(Math.pow(2, 32)); //32 ビットシステム
new ArrayBuffer(-1);

let a = [];
a.length = a.length - 1; // length プロパティに -1 を設定

let b = new Array(Math.pow(2, 32) - 1);
b.length = b.length + 1; // length プロパティに 2^32 を設定
```

### 有効な場合


```js
[Math.pow(2, 40)]; // [ 1099511627776 ]
[-1]; // [ -1 ]
new ArrayBuffer(Math.pow(2, 32) - 1);
new ArrayBuffer(Math.pow(2, 33)); // 64 ビットシステム、 Firefox 89 以降
new ArrayBuffer(0);

let a = [];
a.length = Math.max(0, a.length - 1);

let b = new Array(Math.pow(2, 32) - 1);
b.length = Math.min(0xffffffff, b.length + 1);

// 0xffffffff は 2^32 - 1 の 16 進表記です。
// (-1 >>> 0) と書くこともできます。
```

関連情報
----

* `Array`
* `Array.length`
* `ArrayBuffer`
ReferenceError: "x" is not defined
==================================

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

エラーメッセージ
--------


```js
ReferenceError: "x" is not defined
```

エラーの種類
------

`ReferenceError`.

エラーの原因
------

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

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

例
-

### 宣言されていない変数


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


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


```js
var foo = "bar";
foo.substring(1); // "ar"
```

### スコープの間違い

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


```js
function numbers() {
  var num1 = 2,
    num2 = 3;
  return num1 + num2;
}

console.log(num1); // ReferenceError num1 is not defined.
```


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


```js
var num1 = 2,
  num2 = 3;

function numbers() {
  return num1 + num2;
}

console.log(numbers()); // 5
```

関連情報
----

* スコープ
* 変数の宣言 (JavaScript ガイド)
* 関数のスコープ (JavaScript ガイド)
SyntaxError: Using //@ to indicate sourceURL pragmas is deprecated. Use //# instead
===================================================================================

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

メッセージ
-----
```

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

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

エラーの種類
------

`SyntaxError` が発生したという警告です。 JavaScript の実行は停止しません。

エラーの原因
------

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

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

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

例
-

### 非推奨の構文

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


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

### 標準の構文

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


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


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


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

関連情報
----

* ソースマップの使用 – Firefox ツールドキュメント
* Introduction to source maps – HTML5 rocks
* `SourceMap`
TypeError: property "x" is non-configurable and can't be deleted
================================================================

JavaScript の例外 "property is non-configurable and can't be deleted" は、プロパティを削除しようとしたが、そのプロパティが構成不可である場合に発生します。

エラーメッセージ
--------


```js
TypeError: Calling delete on 'x' is not allowed in strict mode (Edge)
TypeError: property "x" is non-configurable and can't be deleted. (Firefox)
TypeError: Cannot delete property 'x' of #<Object> (Chrome)
```

エラーの種類
------

strict モードでのみ、`TypeError` の警告が出ます。

エラーの原因
------

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

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

例
-

### 構成不可のプロパティに対する削除の試み

構成不可のプロパティは、さほど一般的ではありませんが、`Object.defineProperty()` か `Object.freeze()` を使用して生成することができます。


```js
"use strict";
var obj = Object.freeze({ name: "Elsa", score: 157 });
delete obj.score; // TypeError

("use strict");
var obj = {};
Object.defineProperty(obj, "foo", { value: 2, configurable: false });
delete obj.foo; // TypeError

("use strict");
var frozenArray = Object.freeze([0, 1, 2]);
frozenArray.pop(); // TypeError
```


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


```js
"use strict";
delete Math.PI; // TypeError
```

関連情報
----

* delete
* `Object.defineProperty()`
* `Object.freeze()`
SyntaxError: missing ) after condition
======================================

JavaScript の例外 "missing ) after condition" は、 `if` 文の条件の書き方にエラーがあった場合に発生します。 `if` キーワードの後には括弧が必要です。

エラーメッセージ
--------


```js
SyntaxError: Expected ')' (Edge)
SyntaxError: missing ) after condition (Firefox)
```

エラータイプ
------

`SyntaxError`何がうまくいかなかったのか？
--------------

`if` 条件の書き方にエラーがあります。どのプログラミング言語でも、コードは様々な入力に応じて決定を行い、アクションを実行する必要があります。if 文は指定した条件を満たす場合、処理を実行します。JavaScript では次のように、この条件は `if` キーワードの後に括弧を付ける必要があります。


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

例
-

### 括弧の欠落

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


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

// SyntaxError: missing ) after condition
```


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


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

### `is` キーワードの誤用

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


```js
if (done is true) {
 console.log("we are done!");
}

// SyntaxError: missing ) after condition
```


代わりに、正しい比較演算子を使うべきです。例を示します。


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

関連項目
----

* `if...else`
* 比較演算子
* コードでの意思決定 — 条件文
RangeError: repeat count must be less than infinity
===================================================

JavaScript の例外 "repeat count must be less than infinity" は、 `String.prototype.repeat()` メソッドが使用され、 `count` 引数が無限大である場合に発生します。

エラーメッセージ
--------


```js
RangeError: argument out of range (Edge)
RangeError: repeat count must be less than infinity and not overflow maximum string size (Firefox)
RangeError: Invalid count value (Chrome)
```

エラーの種類
------

`RangeError`エラーの原因
------

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

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

例
-

### 無効なケース


```js
"abc".repeat(Infinity); // RangeError
"a".repeat(2 \*\* 28); // RangeError
```

### 有効な場合


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

関連情報
----

* `String.prototype.repeat()`
ReferenceError: can't access lexical declaration`X' before initialization
=========================================================================

 JavaScript の例外 "can't access lexical declaration `*variable*' before
 initialization" は、語彙変数が初期化前にアクセスされたときに発生します。これはブロック文内で、 `let` または `const` 宣言が定義される前にアクセスされたときに発生します。

エラーメッセージ
--------


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

エラーの種類
------

`ReferenceError`エラーの原因
------

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

例
-

### 不正な場合

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


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

### 有効な場合

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


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

関連情報
----

* let における一時的なデッドゾーンとエラー
TypeError: can't assign to property "x" on "y": not an object
=============================================================

JavaScript の strict モードの例外 "can't assign to property" は、プリミティブ値、例えばシンボル、文字列、数値、論理値などにプロパティを作成しようとしたときに発生します。プリミティブ値はいかなるプロパティを持つこともできません。

エラーメッセージ
--------


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

エラーの種類
------

`TypeError`エラーの原因
------

Strict モードでは、 `TypeError` はプリミティブ値、例えばシンボル、文字列、数値、論理値などにプロパティを作成しようとしたときに発生します。プリミティブ値はいかなるプロパティを持つこともできません。

想定外の場所に想定外の値が流れてきたり、 `String` や `Number` のオブジェクトバリアントが想定されていたりすることが問題となることがあります。

例
-

### 無効な場合


```js
"use strict";

var foo = "my string";
// 次の行は strict モードでない場合は何もしません。
foo.bar = {}; // TypeError: can't assign to property "bar" on "my string": not an object
```

### 問題の修正

このような場所でプリミティブ値を使用しないようにコードを修正するか、 `Object` と同等のオブジェクトを生成して問題を修正するかします。


```js
"use strict";

var foo = new String("my string");
foo.bar = {};
```

関連情報
----

* Strict モード
* プリミティブ
TypeError: invalid assignment to const "x"
==========================================

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

エラーメッセージ
--------


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

エラータイプ
------

`TypeError`エラーの原因
------

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

例
-

### 無効な再宣言

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


```js
const COLUMNS = 80;

// ...

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

### エラーの修正

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

#### 名前の変更

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


```js
const COLUMNS = 80;
const WIDE\_COLUMNS = 120;
```


#### `const`、`let`、`var`

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


```js
let columns = 80;

// ...

let columns = 120;
```


#### スコープ

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


```js
const COLUMNS = 80;

function setupBigScreenEnvironment() {
  const COLUMNS = 120;
}
```

### `const` と不変性

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


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


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


```js
obj.foo = "baz";
obj; // Object { foo: "baz" }
```

関連項目
----

* `const`
* `let`
* `var`
SyntaxError: a declaration in the head of a for-of loop can't have an initializer
=================================================================================

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

エラーメッセージ
--------


```js
SyntaxError: for-of loop head declarations cannot have an initializer (Edge)
SyntaxError: a declaration in the head of a for-of loop can't have an initializer (Firefox)
SyntaxError: for-of loop variable declaration may not have an initializer. (Chrome)
```

エラータイプ
------

`SyntaxError`何がうまくいかなかったのか？
--------------

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

例
-

### 不正な `for-of` ループ


```js
let iterable = [10, 20, 30];

for (let value = 50 of iterable) {
  console.log(value);
}

// SyntaxError: a declaration in the head of a for-of loop can't
// have an initializer
```

### 有効な `for-of` ループ

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


```js
let iterable = [10, 20, 30];

for (let value of iterable) {
  value += 50;
  console.log(value);
}
// 60
// 70
// 80
```

関連項目
----

* `for...of`
* `for...in` – strict モードでは同様に初期化できない (SyntaxError: for-in loop head declarations may not have initializers)
* `for` – 反復時に初期化子を許可している
SyntaxError: missing formal parameter
=====================================


```js
SyntaxError: missing formal parameter (Firefox)
```

エラータイプ
------

`SyntaxError`何がうまくいかなかったのか？
--------------

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

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

例
-

### 関数の正しい引数を提供する

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


```js
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
```


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


```js
function square(number) {
  return number \* number;
}

function greet(greeting) {
  return greeting;
}

function log(arg) {
  console.log(arg);
}
```


次に、好きな引数を渡してこれらの関数を呼び出すことができます。


```js
square(2); // 4

greet("Howdy"); // "Howdy"

log({ obj: "value" }); // Object { obj: "value" }
```

関連項目
----

* 形式的な引数に関係するその他のエラー:
    + SyntaxError: Malformed formal parameter
    + SyntaxError: redeclaration of formal parameter "x"
SyntaxError: missing : after property id
========================================

JavaScript の例外 "missing : after property id" は、オブジェクトがオブジェクト初期化子の構文を使用して生成されたときに発生します。コロン (`:`) はオブジェクトのプロパティのキーと値を区切ります。おそらく、このコロンがないか場所が間違っているかです。

エラーメッセージ
--------


```js
SyntaxError: Expected ':' (Edge)
SyntaxError: missing : after property id (Firefox)
```

エラータイプ
------

`SyntaxError`何がうまくいかなかったのか？
--------------

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


```js
var obj = { propertyKey: "value" };
```

例
-

### コロンと代入記号

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


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


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


```js
var obj = { propertyKey: "value" };

// または

var obj = {};
obj["propertyKey"] = "value";
```

### 空のプロパティ

次のような方法では、プロパティを生成することができません。


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


値がないプロパティを定義する必要がある場合、値として `null` を使用することができます。


```js
var obj = { propertyKey: null };
```

### 計算されたプロパティ

式からプロパティキーを生成する場合、角括弧を使用してください。そうしなければ、プロパティ名を計算することができません。


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


式を括弧 `[]` に入れてください。


```js
var obj = { ["b" + "ar"]: "foo" };
```

関連項目
----

* オブジェクト初期化子
Error: Permission denied to access property "x"
===============================================

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

エラーメッセージ
--------


```js
Error: Permission denied to access property "x"
```

エラーの種類
------

`Error`エラーの原因
------

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

例
-

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


```html
<!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>
```

関連情報
----

* `<iframe>`
* 同一オリジンポリシー