var obj = { 'France': 'Paris', 'England': 'London' };
-// Iterate over the property names:
-for (let country of Object.keys(obj)) {
- var capital = obj[country];
- console.log(country, capital);
-}
-
-for (const [country, capital] of Object.entries(obj))
- console.log(country, capital);
-
-
-
-
この使用例のそのほかの選択肢として、{{jsxref("Map")}} を使用することもできます。
-
-
var map = new Map;
-map.set('France', 'Paris');
-map.set('England', 'London');
-// Iterate over the property names:
-for (let country of map.keys()) {
- let capital = map[country];
- console.log(country, capital);
-}
-
-for (let capital of map.values())
- console.log(capital);
-
-for (const [country, capital] of map.entries())
- console.log(country, capital);
-
diff --git a/files/ja/web/javascript/reference/errors/is_not_iterable/index.md b/files/ja/web/javascript/reference/errors/is_not_iterable/index.md
new file mode 100644
index 0000000000..3b3ffb43aa
--- /dev/null
+++ b/files/ja/web/javascript/reference/errors/is_not_iterable/index.md
@@ -0,0 +1,136 @@
+---
+title: 'TypeError: ''x'' is not iterable'
+slug: Web/JavaScript/Reference/Errors/is_not_iterable
+tags:
+ - Error
+ - JavaScript
+ - Reference
+ - TypeError
+translation_of: Web/JavaScript/Reference/Errors/is_not_iterable
+---
+{{jsSidebar("Errors")}}
+
+JavaScript の例外 "is not iterable" は、 [for…of](/ja/docs/Web/JavaScript/Guide/Loops_and_iteration#for...of_statement) の右辺として与えられた値や、 {{jsxref("Promise.all")}} または {{jsxref("TypedArray.from")}} のような関数の引数として与えられた値が[反復可能オブジェクト](/ja/docs/Web/JavaScript/Reference/Iteration_protocols)ではなかった場合に発生します。
+
+## エラーメッセージ
+
+```js
+TypeError: 'x' is not iterable (Firefox, Chrome)
+TypeError: 'x' is not a function or its return value is not iterable (Chrome)
+```
+
+## エラー種別
+
+{{jsxref("TypeError")}}
+
+## エラーの原因
+
+[for…of](/ja/docs/Web/JavaScript/Guide/Loops_and_iteration#for...of_statement) の右辺、 {{jsxref("Promise.all")}} や {{jsxref("TypedArray.from")}} などの引数として指定された値が[反復可能オブジェクト](/ja/docs/Web/JavaScript/Reference/Iteration_protocols)ではありません。反復可能なものは、{{jsxref("Array")}}、{{jsxref("String")}}、{{jsxref("Map")}} 等のような組み込み反復可能型や、ジェネレーターの結果、[反復可能プロトコル](/ja/docs/Web/JavaScript/Reference/Iteration_protocols#the_iterable_protocol)を実装しているオブジェクトが成ることができます。
+
+## 例
+
+### オブジェクトのプロパティの反復処理
+
+JavaScript では、 {{jsxref("Object")}} は[反復可能プロトコル](/ja/docs/Web/JavaScript/Reference/Iteration_protocols#the_iterable_protocol)を実装していない限り反復処理できません。したがって、オブジェクトのプロパティを反復処理するために [for…of](/ja/docs/Web/JavaScript/Guide/Loops_and_iteration#for...of_statement) を使用することはできません。
+
+```js example-bad
+var obj = { 'France': 'Paris', 'England': 'London' };
+for (let p of obj) { // TypeError: obj is not iterable
+ // …
+}
+```
+
+代わりに、オブジェクトのプロパティを反復処理するためには {{jsxref("Object.keys")}} か {{jsxref("Object.entries")}} を使用してください。
+
+```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);
+```
+
+この使用例のそのほかの選択肢として、{{jsxref("Map")}} を使用することもできます。
+
+```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);
+```
+
+### ジェネレーターの反復処理
+
+[ジェネレーター](/ja/docs/Web/JavaScript/Guide/Iterators_and_Generators#generators)は反復可能オブジェクトを生成するために呼び出す関数です。
+
+```js example-bad
+function* generate(a, b) {
+ yield a;
+ yield b;
+}
+
+for (let x of generate) // TypeError: generate is not iterable
+ console.log(x);
+```
+
+ジェネレーターを呼び出していないとき、ジェネレーターに対応した {{jsxref("Function")}} オブジェクトは呼び出し可能ですが、反復処理はできません。ジェネレーターを呼び出すと、ジェネレーターの実行中に生成された値を反復処理する反復可能オブジェクトが生成されます。
+
+```js example-good
+function* generate(a, b) {
+ yield a;
+ yield b;
+}
+
+for (let x of generate(1,2))
+ console.log(x);
+```
+
+### 独自の反復可能オブジェクトでの反復処理
+
+独自の反復可能オブジェクトは、 {{jsxref("Symbol.iterator")}} メソッドを実装することで作成することができます。 iterator メソッドはイテレーターであるオブジェクト、すなわち next メソッドを返す必要があります。
+
+```js example-bad
+const myEmptyIterable = {
+ [Symbol.iterator]() {
+ return [] // [] は反復可能ですが、イテレーターではありません。 -- next メソッドがないからです。
+ }
+}
+
+Array.from(myEmptyIterable); // TypeError: myEmptyIterable is not iterable
+```
+
+こちらは正しい実装です。
+
+```js example-good
+const myEmptyIterable = {
+ [Symbol.iterator]() {
+ return [][Symbol.iterator]()
+ }
+}
+
+Array.from(myEmptyIterable); // []
+```
+
+## 関連情報
+
+- [反復可能プロトコル](/ja/docs/Web/JavaScript/Reference/Iteration_protocols#the_iterable_protocol)
+- {{jsxref("Object.keys")}}
+- {{jsxref("Object.entries")}}
+- {{jsxref("Map")}}
+- [ジェネレーター](/ja/docs/Web/JavaScript/Guide/Iterators_and_Generators#generators)
+- [for…of](/ja/docs/Web/JavaScript/Guide/Loops_and_iteration#for...of_statement)
+
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
deleted file mode 100644
index 93d167e25a..0000000000
--- a/files/ja/web/javascript/reference/errors/no_non-null_object/index.html
+++ /dev/null
@@ -1,69 +0,0 @@
----
-title: 'TypeError: "x" is not a non-null object'
-slug: Web/JavaScript/Reference/Errors/No_non-null_object
-tags:
-- Error
-- Errors
-- JavaScript
-- TypeError
-translation_of: Web/JavaScript/Reference/Errors/No_non-null_object
----
-
{{JSSidebar("Errors")}}
-
-
JavaScript の例外 "is not a non-null object" は、オブジェクトが何かを求めているのに提供されなかった場合に発生します。 {{jsxref("null")}} はオブジェクトではなく、動作しません。
-
-
エラーメッセージ
-
-
TypeError: Invalid descriptor for property {x} (Edge)
-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)
-
Object.defineProperty({}, 'key', 1);
-// TypeError: 1 is not a non-null object
-
-Object.defineProperty({}, 'key', null);
-// TypeError: null is not a non-null object
-
diff --git a/files/ja/web/javascript/reference/errors/no_non-null_object/index.md b/files/ja/web/javascript/reference/errors/no_non-null_object/index.md
new file mode 100644
index 0000000000..b548d38c6a
--- /dev/null
+++ b/files/ja/web/javascript/reference/errors/no_non-null_object/index.md
@@ -0,0 +1,73 @@
+---
+title: 'TypeError: "x" is not a non-null object'
+slug: Web/JavaScript/Reference/Errors/No_non-null_object
+tags:
+- Error
+- Errors
+- JavaScript
+- TypeError
+translation_of: Web/JavaScript/Reference/Errors/No_non-null_object
+---
+{{JSSidebar("Errors")}}
+
+JavaScript の例外 "is not a non-null object" は、ある場所でオブジェクトが期待されているのに提供されなかった場合に発生します。 {{jsxref("null")}} はオブジェクトではなく、動作しません。
+
+## エラーメッセージ
+
+```js
+TypeError: Invalid descriptor for property {x} (Edge)
+TypeError: "x" is not a non-null object (Firefox)
+TypeError: Property description must be an object: "x" (Chrome)
+TypeError: Invalid value used in weak set (Chrome)
+```
+
+## エラーの種類
+
+{{jsxref("TypeError")}}
+
+## エラーの原因
+
+ある場所でオブジェクトが期待されていますが、提供されませんでした。 {{jsxref("null")}} はオブジェクトではなく、動作しません。与えられた状況で適切なオブジェクトを提供しなければなりません。
+
+## 例
+
+## プロパティ記述子が求められている場合
+
+{{jsxref("Object.create()")}} メソッドや {{jsxref("Object.defineProperty()")}} メソッド、{{jsxref("Object.defineProperties()")}} メソッドを使用するとき、省略可能な記述子の引数として、プロパティ記述子オブジェクトが想定されます。 (ただの数値など) オブジェクト以外のものを提供すると、エラーが発生します。
+
+```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
+```
+
+有効なプロパティ記述子はこのようになります。
+
+```js example-good
+Object.defineProperty({}, 'key', { value: 'foo', writable: false });
+```
+
+## `WeakMap` および `WeakSet` オブジェクトにはオブジェクトキーが必要
+
+{{jsxref("WeakMap")}} および {{jsxref("WeakSet")}} オブジェクトはオブジェクトをキーとして保持します。そのほかの型をキーとして使用できません。
+
+```js example-bad
+var ws = new WeakSet();
+ws.add('foo');
+// TypeError: "foo" is not a non-null object
+```
+
+代わりにオブジェクトを使用してください。
+
+```js example-good
+ws.add({foo: 'bar'});
+ws.add(window);
+```
+
+## 関連項目
+
+- {{jsxref("Object.create()")}}
+- {{jsxref("Object.defineProperty()")}}, {{jsxref("Object.defineProperties()")}}
+- {{jsxref("WeakMap")}}, {{jsxref("WeakSet")}}
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
deleted file mode 100644
index b916bafd40..0000000000
--- a/files/ja/web/javascript/reference/errors/not_a_constructor/index.html
+++ /dev/null
@@ -1,98 +0,0 @@
----
-title: 'TypeError: "x" is not a constructor'
-slug: Web/JavaScript/Reference/Errors/Not_a_constructor
-tags:
- - Error
- - Errors
- - JavaScript
- - TypeError
-translation_of: Web/JavaScript/Reference/Errors/Not_a_constructor
----
-
{{jsSidebar("Errors")}}
-
-
JavaScript の例外 "is not a constructor" は、オブジェクトや変数をコンストラクターとして使用しようとしたものの、そのオブジェクトや変数がコンストラクターではなかった場合に発生します。
-
-
エラーメッセージ
-
-
TypeError: Object doesn't support this action (Edge)
-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: Atomics is not a constructor
-
-
-
エラーの種類
-
-
{{jsxref("TypeError")}}
-
-
エラーの原因
-
-
オブジェクト、または変数をコンストラクターとして使おうとしていますが、それらがコンストラクターではありません。コンストラクターとは何かについては、コンストラクターまたは new 演算子を参照してください。
var Car = 1;
-new Car();
-// TypeError: Car is not a constructor
-
-new Math();
-// TypeError: Math is not a constructor
-
-new Symbol();
-// TypeError: Symbol is not a constructor
-
-function* f() {};
-var obj = new f;
-// TypeError: f is not a constructor
-
-
-
car コンストラクター
-
-
自動車のためのオブジェクト型を作成するとします。このオブジェクト型を Car と呼び、 make, model, year の各プロパティを持つようにしたいとします。これを実現するには、次のような関数を定義します。
diff --git a/files/ja/web/javascript/reference/errors/not_a_constructor/index.md b/files/ja/web/javascript/reference/errors/not_a_constructor/index.md
new file mode 100644
index 0000000000..697342bae4
--- /dev/null
+++ b/files/ja/web/javascript/reference/errors/not_a_constructor/index.md
@@ -0,0 +1,105 @@
+---
+title: 'TypeError: "x" is not a constructor'
+slug: Web/JavaScript/Reference/Errors/Not_a_constructor
+tags:
+ - Error
+ - Errors
+ - JavaScript
+ - TypeError
+translation_of: Web/JavaScript/Reference/Errors/Not_a_constructor
+---
+{{jsSidebar("Errors")}}
+
+JavaScript の例外 "is not a constructor" は、オブジェクトや変数をコンストラクターとして使用しようとしたものの、そのオブジェクトや変数がコンストラクターではなかった場合に発生します。
+
+## エラーメッセージ
+
+```js
+TypeError: Object doesn't support this action (Edge)
+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: Atomics is not a constructor
+```
+
+## エラーの種類
+
+{{jsxref("TypeError")}}
+
+## エラーの原因
+
+オブジェクトや変数をコンストラクターとして使おうとしていますが、それらがコンストラクターではありません。コンストラクターとは何かについては、[コンストラクター](/ja/docs/Glossary/Constructor)または [`new` 演算子](/ja/docs/Web/JavaScript/Reference/Operators/new)を参照してください。
+
+{{jsxref("String")}} や {{jsxref("Array")}} のような、 `new` を使用して生成できる数多くのグローバルオブジェクトがあります。しかし、いくつかのグローバルオブジェクトはそうではなく、それらのプロパティやメソッドは静的です。次の JavaScript 標準組み込みオブジェクトのうち、 {{jsxref("Math")}}、{{jsxref("JSON")}}、{{jsxref("Symbol")}}、{{jsxref("Reflect")}}、{{jsxref("Intl")}}、{{jsxref("Atomics")}} はコンストラクターではありません。
+
+[ジェネレーター関数](/ja/docs/Web/JavaScript/Reference/Statements/function*)も、コンストラクターとして使用することはできません。
+
+## 例
+
+### 無効な場合
+
+```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
+```
+
+### car コンストラクター
+
+自動車のためのオブジェクト型を作成するとします。このオブジェクト型を `Car` と呼び、 make, model, year の各プロパティを持つようにしたいとします。これを実現するには、次のような関数を定義します。
+
+```js
+function Car(make, model, year) {
+ this.make = make;
+ this.model = model;
+ this.year = year;
+}
+```
+
+次のようにして `mycar` というオブジェクトを生成できるようになりました。
+
+```js
+var mycar = new Car('Eagle', 'Talon TSi', 1993);
+```
+
+### プロミスの場合
+
+ただちに解決するか拒否されるプロミスを返す場合は、 _new Promise(...)_ を生成して操作する必要はありません。
+
+これは正しくなく ([Promise コンストラクター](/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise)が正しく呼び出されません)、 `TypeError: this is not a constructor` 例外が発生します。
+
+```js example-bad
+return new Promise.resolve(true);
+```
+
+代わりに、 [Promise.resolve()](/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve) または
+[Promise.reject()](/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/reject) の[静的メソッド]()を使用してください。
+
+
// 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);
+
The JavaScript strict
- mode-only exception "is read-only" occurs when a global variable or object
- property that was assigned to is a read-only property.
-
-
エラーメッセージ
-
-
TypeError: Assignment to read-only properties is not allowed in strict mode (Edge)
-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)
-