正誤表
下記の誤りや改良点等が見つかりました。ご連絡いただいた方、ありがとうございます。お気づきの点は、ご連絡ページからお知らせいただければ幸いです。
お持ちの本が第何刷かをご確認の上、該当するリンクをクリック(タップ)してご確認ください。巻末(奥付)の「著者」の上に記載されているのが、たとえば「初版第2刷発行」でしたら、お持ちの本は「第2刷」です。
(2022年1月12日更新)
第6刷をお持ちの方のための正誤表
日付(2022.1.12など)はこのページに記載した日です。
-
p. 171 sample/ch09/ex09-02-5/main.jsの13行目 (2022.6.16)
this._userGear = vaule;
↓
this._userGear = value; -
p. 177 冒頭のコードの4-5行目(example/ch09/ex09-02-8/main.js list3。2022.5.23)
console.log(c instanceof ......
↓
console.log(c2 instanceof ...... -
p. 44の2行目から5行目(example/ch03/ex03-11-6/main.js list1)の結果(2021.3.26)
Felinae
↓
Felidae -
p. 70、17行目(「4.2 JavaScript の制御フロー文」の2行上)のコード(2021.6.12)
if (100 < funds) console.log("意気揚々と船に戻る。 ");
↓
if (100 <= funds) console.log("意気揚々と船に戻る。 "); -
p. 95、下から5行目(表5-6の下の説明。2021.10.31)
(optionsが null または undefined の場合)
↓
(suppliedOptions が null または undefined の場合) -
p. 137の冒頭(example/ch07/ex07-08-4/main.jsの次)のコード(2021.1.5)
下記の図のように「}」の位置をご訂正ください
-
p. 147、example/ch08/ex08-02-9/main.jsのコード(2021.11.29。2022.1.12再修正)
MDNのページによると、指定する関数は1, 0, -1のいずれかの値を返すことになっているので、修正前の定義では正しく動作しません。node v16.13.0(2021年11月29日に確認)では結果が違ってしまいました。翻訳の際の確認時には「実行結果」のとおりに動いていたと思いますが、たまたまそうなっただけのようです。
... arr.sort((a, b) => a.name > b.name); // nameでソート ... arr.sort((a, b) => a.name[1] < b.name[1]); // nameの2文字目で逆順にソート ...
↓
... arr.sort((a, b) => a.name > b.name ? 1 : (a.name === b.name ? 0 : -1)); // nameでソート ... arr.sort((a, b) => a.name[1] < b.name[1] ? 1 : (a.name[1] === b.name[1] ? 0 : -1)); // nameの2文字目で逆順にソート ...
(すみません。最後の行の不等号の向き(緑色の不等号)が、2021.11.29の修正では逆でした。2022.1.12に修正しました) -
p. 290、一番下の行(17.11のlist1の下の説明。2022.1.12)
「(」「)」「*」をエスケープしています。
↓
「(」「)」「*」「+」をエスケープしています。
-
p. 306、図18-1(2022.1.12)
下部、ほぼ中央の<body>から<h1><div>などへの線が抜けていました。下図のようにご訂正ください。
-
p. 382、「C.3 プロジェクトルート」の2段落の先頭行(2022.1.12)
マンドラインの実行は
↓
コマンドラインの実行は
第6刷をお持ちの方のための正誤表はこれで終わりです。
第5刷をお持ちの方のための正誤表
日付(2022.1.12など)はこのページに記載した日です。
-
p. 171 sample/ch09/ex09-02-5/main.jsの13行目 (2022.6.16)
this._userGear = vaule;
↓
this._userGear = value; -
p. 177 冒頭のコードの4-5行目(example/ch09/ex09-02-8/main.js list3。2022.5.23)
console.log(c instanceof ......
↓
console.log(c2 instanceof ...... -
p. 44の2行目から5行目(example/ch03/ex03-11-6/main.js list1)の結果(2021.3.26)
Felinae
↓
Felidae -
p. 70、17行目(「4.2 JavaScript の制御フロー文」の2行上)のコード(2021.6.12)
if (100 < funds) console.log("意気揚々と船に戻る。 ");
↓
if (100 <= funds) console.log("意気揚々と船に戻る。 "); -
p. 95、下から5行目(表5-6の下の説明。2021.10.31)
(optionsが null または undefined の場合)
↓
(suppliedOptions が null または undefined の場合) -
p. 137の冒頭(example/ch07/ex07-08-4/main.jsの次)のコード(2021.1.5)
下記の図のように「}」の位置をご訂正ください
-
p. 147、example/ch08/ex08-02-9/main.jsのコード(2021.11.29。2022.1.12再修正)
MDNのページによると、指定する関数は1, 0, -1のいずれかの値を返すことになっているので、修正前の定義では正しく動作しません。node v16.13.0(2021年11月29日に確認)では結果が違ってしまいました。翻訳の際の確認時には「実行結果」のとおりに動いていたと思いますが、たまたまそうなっただけのようです。
... arr.sort((a, b) => a.name > b.name); // nameでソート ... arr.sort((a, b) => a.name[1] < b.name[1]); // nameの2文字目で逆順にソート ...
↓
... arr.sort((a, b) => a.name > b.name ? 1 : (a.name === b.name ? 0 : -1)); // nameでソート ... arr.sort((a, b) => a.name[1] < b.name[1] ? 1 : (a.name[1] === b.name[1] ? 0 : -1)); // nameの2文字目で逆順にソート ...
(すみません。最後の行の不等号の向き(緑色の不等号)が、2021.11.29の修正では逆でした。2022.1.12に修正しました) -
p. 290、一番下の行(17.11のlist1の下の説明。2022.1.12)
「(」「)」「*」をエスケープしています。
↓
「(」「)」「*」「+」をエスケープしています。
-
p. 306、図18-1(2022.1.12)
下部、ほぼ中央の<body>から<h1><div>などへの線が抜けていました。下図のようにご訂正ください。
-
p. 382、「C.3 プロジェクトルート」の2段落の先頭行(2022.1.12)
マンドラインの実行は
↓
コマンドラインの実行は
-
p. 137の冒頭(example/ch07/ex07-08-4/main.jsの次)のコード(2021.1.5)
下記の図のように「}」の位置をご訂正ください
-
p. 337、1行目(2020.6.29)
modules.export = calculate
↓
module.exports = calculate
第5刷をお持ちの方のための正誤表はこれで終わりです。
第4刷をお持ちの方のための正誤表
日付(2022.1.12など)はこのページに記載した日です。
-
p. 171 sample/ch09/ex09-02-5/main.jsの13行目 (2022.6.16)
this._userGear = vaule;
↓
this._userGear = value; -
p. 177 冒頭のコードの4-5行目(example/ch09/ex09-02-8/main.js list3。2022.5.23)
console.log(c instanceof ......
↓
console.log(c2 instanceof ...... -
p. 44の2行目から5行目(example/ch03/ex03-11-6/main.js list1)の結果(2021.3.26)
Felinae
↓
Felidae -
p. 70、17行目(「4.2 JavaScript の制御フロー文」の2行上)のコード(2021.6.12)
if (100 < funds) console.log("意気揚々と船に戻る。 ");
↓
if (100 <= funds) console.log("意気揚々と船に戻る。 "); -
p. 95、下から5行目(表5-6の下の説明。2021.10.31)
(optionsが null または undefined の場合)
↓
(suppliedOptions が null または undefined の場合) -
p. 137の冒頭(example/ch07/ex07-08-4/main.jsの次)のコード(2021.1.5)
下記の図のように「}」の位置をご訂正ください
-
p. 147、example/ch08/ex08-02-9/main.jsのコード(2021.11.29。2022.1.12再修正)
MDNのページによると、指定する関数は1, 0, -1のいずれかの値を返すことになっているので、修正前の定義では正しく動作しません。node v16.13.0(2021年11月29日に確認)では結果が違ってしまいました。翻訳の際の確認時には「実行結果」のとおりに動いていたと思いますが、たまたまそうなっただけのようです。
... arr.sort((a, b) => a.name > b.name); // nameでソート ... arr.sort((a, b) => a.name[1] < b.name[1]); // nameの2文字目で逆順にソート ...
↓
... arr.sort((a, b) => a.name > b.name ? 1 : (a.name === b.name ? 0 : -1)); // nameでソート ... arr.sort((a, b) => a.name[1] < b.name[1] ? 1 : (a.name[1] === b.name[1] ? 0 : -1)); // nameの2文字目で逆順にソート ...
(すみません。最後の行の不等号の向き(緑色の不等号)が、2021.11.29の修正では逆でした。2022.1.12に修正しました) -
p. 290、一番下の行(17.11のlist1の下の説明。2022.1.12)
「(」「)」「*」をエスケープしています。
↓
「(」「)」「*」「+」をエスケープしています。
-
p. 306、図18-1(2022.1.12)
下部、ほぼ中央の<body>から<h1><div>などへの線が抜けていました。下図のようにご訂正ください。
-
p. 382、「C.3 プロジェクトルート」の2段落の先頭行(2022.1.12)
マンドラインの実行は
↓
コマンドラインの実行は
-
p. 137の冒頭(example/ch07/ex07-08-4/main.jsの次)のコード(2021.1.5)
下記の図のように「}」の位置をご訂正ください
-
p. 337、1行目(2020.6.29)
modules.export = calculate
↓
module.exports = calculate
-
p. 349、下から2行目(2019.2.10)
プログラムが起動されてディレクトリへ移動
↓
プログラムが起動されたディレクトリへ移動 -
p. 253、メモ(2018.12.26)
runGeneratorはこのURLの記事にあるのではなく、それを含む一連の記事のひとつ(Going Async With ES6 Generators)に書かれています。
grunはKyle Simpsonがジェネレータに関する一連の記事で取り上げたrunGenerator をベースにしています(http://davidwalsh.name/es6-generators)。
↓
grunはKyle Simpsonがジェネレータに関する一連の記事(http://davidwalsh.name/es6-generators)で取り上げたrunGenerator をベースにしています。 -
p. 253、メモの下(2018.12.26)
このジェネレータランナーをジェネレータ関数に渡すと、実行されます。
↓
このジェネレータランナーにジェネレータ関数を渡すと実行されます。
第4刷をお持ちの方のための正誤表はこれで終わりです。
第3刷をお持ちの方のための正誤表
日付(2022.1.12など)はこのページに記載した日です。
-
p. 171 sample/ch09/ex09-02-5/main.jsの13行目 (2022.6.16)
this._userGear = vaule;
↓
this._userGear = value; -
p. 177 冒頭のコードの4-5行目(example/ch09/ex09-02-8/main.js list3。2022.5.23)
console.log(c instanceof ......
↓
console.log(c2 instanceof ...... -
p. 44の2行目から5行目(example/ch03/ex03-11-6/main.js list1)の結果(2021.3.26)
Felinae
↓
Felidae -
p. 70、17行目(「4.2 JavaScript の制御フロー文」の2行上)のコード(2021.6.12)
if (100 < funds) console.log("意気揚々と船に戻る。 ");
↓
if (100 <= funds) console.log("意気揚々と船に戻る。 "); -
p. 95、下から5行目(表5-6の下の説明。2021.10.31)
(optionsが null または undefined の場合)
↓
(suppliedOptions が null または undefined の場合) -
p. 137の冒頭(example/ch07/ex07-08-4/main.jsの次)のコード(2021.1.5)
下記の図のように「}」の位置をご訂正ください
-
p. 147、example/ch08/ex08-02-9/main.jsのコード(2021.11.29。2022.1.12再修正)
MDNのページによると、指定する関数は1, 0, -1のいずれかの値を返すことになっているので、修正前の定義では正しく動作しません。node v16.13.0(2021年11月29日に確認)では結果が違ってしまいました。翻訳の際の確認時には「実行結果」のとおりに動いていたと思いますが、たまたまそうなっただけのようです。
... arr.sort((a, b) => a.name > b.name); // nameでソート ... arr.sort((a, b) => a.name[1] < b.name[1]); // nameの2文字目で逆順にソート ...
↓
... arr.sort((a, b) => a.name > b.name ? 1 : (a.name === b.name ? 0 : -1)); // nameでソート ... arr.sort((a, b) => a.name[1] < b.name[1] ? 1 : (a.name[1] === b.name[1] ? 0 : -1)); // nameの2文字目で逆順にソート ...
(すみません。最後の行の不等号の向き(緑色の不等号)が、2021.11.29の修正では逆でした。2022.1.12に修正しました) -
p. 290、一番下の行(17.11のlist1の下の説明。2022.1.12)
「(」「)」「*」をエスケープしています。
↓
「(」「)」「*」「+」をエスケープしています。
-
p. 306、図18-1(2022.1.12)
下部、ほぼ中央の<body>から<h1><div>などへの線が抜けていました。下図のようにご訂正ください。
-
p. 382、「C.3 プロジェクトルート」の2段落の先頭行(2022.1.12)
マンドラインの実行は
↓
コマンドラインの実行は
-
p. 137の冒頭(example/ch07/ex07-08-4/main.jsの次)のコード(2021.1.5)
下記の図のように「}」の位置をご訂正ください
-
p. 337、1行目(2020.6.29)
modules.export = calculate
↓
module.exports = calculate
-
p. 349、下から2行目(2019.2.10)
プログラムが起動されてディレクトリへ移動
↓
プログラムが起動されたディレクトリへ移動 -
p. 253、メモ(2018.12.26)
runGeneratorはこのURLの記事にあるのではなく、それを含む一連の記事のひとつ(Going Async With ES6 Generators)に書かれています。
grunはKyle Simpsonがジェネレータに関する一連の記事で取り上げたrunGenerator をベースにしています(http://davidwalsh.name/es6-generators)。
↓
grunはKyle Simpsonがジェネレータに関する一連の記事(http://davidwalsh.name/es6-generators)で取り上げたrunGenerator をベースにしています。 -
p. 253、メモの下(2018.12.26)
このジェネレータランナーをジェネレータ関数に渡すと、実行されます。
↓
このジェネレータランナーにジェネレータ関数を渡すと実行されます。
-
p. 42、下から4行目、およびp. 43、11行目(2018.6.26)
subfaimily
↓
subfamily -
p. 245、2行目(2018.5.7)
「;」があると.catchは構文エラーになってしまいます。thenがプロミスを返すので、ここで切ってはダメでした。
});
})
-
p. 397、5行目の後ろに段落追加(2018.4.6)
↓
この付録では識別子(変数名や関数名など)に日本語を用いています。英語の識別子を用いたバージョンは訳者のサポートページ(https://www.marlin-arms.com/support/ljs3/)からダウンロードできますので、ご希望の方はそちらをご覧ください。
第3刷をお持ちの方のための正誤表はこれで終わりです。
第2刷をお持ちの方のための正誤表
日付(2022.1.12など)はこのページに記載した日です。
-
p. 171 sample/ch09/ex09-02-5/main.jsの13行目 (2022.6.16)
this._userGear = vaule;
↓
this._userGear = value; -
p. 177 冒頭のコードの4-5行目(example/ch09/ex09-02-8/main.js list3。2022.5.23)
console.log(c instanceof ......
↓
console.log(c2 instanceof ...... -
p. 44の2行目から5行目(example/ch03/ex03-11-6/main.js list1)の結果(2021.3.26)
Felinae
↓
Felidae -
p. 70、17行目(「4.2 JavaScript の制御フロー文」の2行上)のコード(2021.6.12)
if (100 < funds) console.log("意気揚々と船に戻る。 ");
↓
if (100 <= funds) console.log("意気揚々と船に戻る。 "); -
p. 95、下から5行目(表5-6の下の説明。2021.10.31)
(optionsが null または undefined の場合)
↓
(suppliedOptions が null または undefined の場合) -
p. 137の冒頭(example/ch07/ex07-08-4/main.jsの次)のコード(2021.1.5)
下記の図のように「}」の位置をご訂正ください
-
p. 147、example/ch08/ex08-02-9/main.jsのコード(2021.11.29。2022.1.12再修正)
MDNのページによると、指定する関数は1, 0, -1のいずれかの値を返すことになっているので、修正前の定義では正しく動作しません。node v16.13.0(2021年11月29日に確認)では結果が違ってしまいました。翻訳の際の確認時には「実行結果」のとおりに動いていたと思いますが、たまたまそうなっただけのようです。
... arr.sort((a, b) => a.name > b.name); // nameでソート ... arr.sort((a, b) => a.name[1] < b.name[1]); // nameの2文字目で逆順にソート ...
↓
... arr.sort((a, b) => a.name > b.name ? 1 : (a.name === b.name ? 0 : -1)); // nameでソート ... arr.sort((a, b) => a.name[1] < b.name[1] ? 1 : (a.name[1] === b.name[1] ? 0 : -1)); // nameの2文字目で逆順にソート ...
(すみません。最後の行の不等号の向き(緑色の不等号)が、2021.11.29の修正では逆でした。2022.1.12に修正しました) -
p. 290、一番下の行(17.11のlist1の下の説明。2022.1.12)
「(」「)」「*」をエスケープしています。
↓
「(」「)」「*」「+」をエスケープしています。
-
p. 306、図18-1(2022.1.12)
下部、ほぼ中央の<body>から<h1><div>などへの線が抜けていました。下図のようにご訂正ください。
-
p. 382、「C.3 プロジェクトルート」の2段落の先頭行(2022.1.12)
マンドラインの実行は
↓
コマンドラインの実行は
-
p. 137の冒頭(example/ch07/ex07-08-4/main.jsの次)のコード(2021.1.5)
下記の図のように「}」の位置をご訂正ください
-
p. 337、1行目(2020.6.29)
modules.export = calculate
↓
module.exports = calculate
-
p. 349、下から2行目(2019.2.10)
プログラムが起動されてディレクトリへ移動
↓
プログラムが起動されたディレクトリへ移動 -
p. 253、メモ(2018.12.26)
runGeneratorはこのURLの記事にあるのではなく、それを含む一連の記事のひとつ(Going Async With ES6 Generators)に書かれています。
grunはKyle Simpsonがジェネレータに関する一連の記事で取り上げたrunGenerator をベースにしています(http://davidwalsh.name/es6-generators)。
↓
grunはKyle Simpsonがジェネレータに関する一連の記事(http://davidwalsh.name/es6-generators)で取り上げたrunGenerator をベースにしています。 -
p. 253、メモの下(2018.12.26)
このジェネレータランナーをジェネレータ関数に渡すと、実行されます。
↓
このジェネレータランナーにジェネレータ関数を渡すと実行されます。
-
p. 42、下から4行目、およびp. 43、11行目(2018.6.26)
subfaimily
↓
subfamily -
p. 245、2行目(2018.5.7)
「;」があると.catchは構文エラーになってしまいます。thenがプロミスを返すので、ここで切ってはダメでした。
});
})
-
p. 397、5行目の後ろに段落追加(2018.4.6)
↓
この付録では識別子(変数名や関数名など)に日本語を用いています。英語の識別子を用いたバージョンは訳者のサポートページ(https://www.marlin-arms.com/support/ljs3/)からダウンロードできますので、ご希望の方はそちらをご覧ください。
-
p. 320、最後の「メモ」の2行目(2018.4.2)
たとえば要素eltにクリックのハンドラを追加するには次のように書けば済みます(ただし、ハンドラを一度にひとつしか登録できないという不都合な点はあります)。
↓
この方法では、たとえば要素eltにクリックのハンドラを追加するには次のように記述します。ハンドラを複数登録することができないのが、この方法の最大の弱点です。 -
p. 318、1行目(2018.4.2)
自作作するイベントハンドラでもこのプロパティを無視するのが普通です。
↓
自作作するイベントハンドラではこのプロパティを無視することができますし、また無視するのが普通です。 -
p. 264のリストの実行結果(2018.4.2)
別の時刻を指定した実行結果と混在させてしまったようです。すみません。
/* 日本で実行 */ const d = new Date(Date.UTC(1930, 4, 10, 10, 0)); /* UTC1930年5月10日午前10時0分 */ console.log(d.toLocaleDateString()); // 1930-05-10 console.log(d.toLocaleTimeString()); // 09:00:00 console.log(d.toTimeString()); // 09:00:00 GMT+0900 (JST) console.log(d.toUTCString()); // Sat, 10 May 1930 00:00:00 GMT const moment = require('moment-timezone'); console.log(moment(d).format("YYYY-MM-DD")); // 1930-05-10 console.log(moment(d).format("YYYY-MM-DD HH:mm")); // 1930-05-10 09:00 console.log(moment(d).format("YYYY-MM-DD HH:mm Z")); // 1930-05-10 09:00 +09:00 console.log(moment(d).format("YYYY-MM-DD HH:mm [UTC]Z")); // 1930-05-10 09:00 UTC+09:00 console.log(moment(d).format("dddd, MMMM [the] Do, YYYY")); // Saturday, May the 10th, 1930 console.log(moment(d).format("h:mm a")); // "5:00 pm" console.log(moment(d).format("YYYY年M月D日 hh:mmA")); // 1930年5月10日 07:00PM
/* 日本で実行 */ const d = new Date(Date.UTC(1930, 4, 10, 10, 0)); /* UTC1930年5月10日午前10時0分 */ console.log(d.toLocaleDateString()); // 1930-5-10 console.log(d.toLocaleTimeString()); // 19:00:00 console.log(d.toTimeString()); // 19:00:00 GMT+0900 (JST) console.log(d.toUTCString()); // Sat, 10 May 1930 10:00:00 GMT const moment = require('moment-timezone'); console.log(moment(d).format("YYYY-MM-DD")); // 1930-05-10 console.log(moment(d).format("YYYY-MM-DD HH:mm")); // 1930-05-10 19:00 console.log(moment(d).format("YYYY-MM-DD HH:mm Z")); // 1930-05-10 19:00 +09:00 console.log(moment(d).format("YYYY-MM-DD HH:mm [UTC]Z")); // 1930-05-10 19:00 UTC+09:00 console.log(moment(d).format("dddd, MMMM [the] Do, YYYY")); // Saturday, May the 10th, 1930 console.log(moment(d).format("h:mm a")); // 7:00 pm console.log(moment(d).format("YYYY年M月D日 hh:mmA")); // 1930年5月10日 07:00PM
-
p. 209、下から6行目(2018.4.2)
セットやオブジェクトが複数の値を供給するためのものである場合、イテレータとすることで for...of などの標準的な手法を使って処理を行うことができます。
↓
オブジェクトなどが複数の値を供給するためのものである場合、反復可能(iterable)にしたり、イテレータとしたりすることで、 for...of などの標準的な手法を使った処理が可能になります。 -
p. 127、example/ch07/ex07-02-2/main.jsの下の説明(2018.3.31)
原著の説明どおりにプログラムが動かなかったため、プログラムを修正して辻褄を合わせようとしたのですが、無理が生じてしまいましたので、書き換えました(2017.7.13に公開した訂正を置き換えてください)。
example/ch07/ex07-02-2/main.js
const x = 3; function f() { console.log(x); // 3 (これは動く) console.log(y); // ReferenceError: y is not defined (エラーになる) } f(); const y = 3;
変数xは関数fが定義されるときに存在していますがyは存在していません。fの定義の下でyを宣言しfを呼び出しています。fが呼び出されたときその本体の中でxはスコープにありますが、yはスコープにはありません。これが静的スコープの例です。関数fは、それが定義されたときにスコープにある識別子にのみアクセスできます。関数f()が呼び出されたところでスコープにある識別子ではありません。
example/ch07/ex07-02-2/main.js
const x = 3; function f() { console.log(x); // 3 (これは動く) console.log(y); // ReferenceError: y is not defined (エラーになる) } f(); const y = 3;
変数xは関数fが呼び出されるときに存在していますがyは存在していません。このため、上の例はエラーになってしまいます。 さて、最後の2行が次のように逆の順番に書かれているとどうなるでしょうか(example/ch07/ex07-02-3/main.js)。この場合fの呼び出しの前にyが存在することになり、エラーにならなくなります。関数fは、それが呼び出されたときにスコープにある識別子にはアクセスできるのです。
const y = 3; f();
-
p. 174、10行目(表現の修正です。2018.2.7)
たとえばareSimilarというメソッドを使ってメーカーとモデルが同じ場合にtrueを返すといった場合です。また、areSameは同じ車両番号をもっている場合にtrueを返すなどです。
↓
たとえばareSimilarというメソッドが「メーカーとモデルが同じ場合にtrueを返す」、あるいはareSameが「同じ車両番号をもっている場合にtrueを返す」などです。
-
p. 166、list1の下の本文7行目(下から17行目。2018.2.7)
現在ユーザーが指定しているギアを表すUserGearの2つです。
↓
現在ユーザーが指定しているギアを表すuserGearの2つです。 -
p. 234、11行目(2018.2.6)
問題はコールバックの実行時にはiは既に-1になっているのです。
↓
コールバックの実行時にはiは既に-1になっているのです。 -
p. 94、下から8行目(2017.12.1)
この例の2行目は、
↓
この例の3行目は、 -
p. 192、7行目(2017.11.27)
typeof演算子を使って、
↓
instanceof演算子を使って、 -
p. 21、下から4行目(2017.10.20)
// Hello, Word!
↓
// Hello, World! -
p. 335、6行目(2017.10.20)
ウェブ開発書
↓
ウェブ開発者 -
p. 46、1行目(2017.8.22)
用意されいます
↓
用意されています -
p. 52、下から3行目(2017.8.22)
fasle
↓
false
-
p. 159、表8-4、3行目filterの説明(2017.8.8)
条件を満たす要素の削除
↓
条件を満たさない要素の削除
-
p. 66、図4-5(2017.8.5)
このリンク先の図のようにご訂正ください(forループの条件判定の位置が変です。原文の図のチェックを怠りました。すみません) -
p. 68、図4-6(2017.8.5。2017.6.13に一度修正版を掲載しましたがこちらのほうが正確です)
このリンク先の図のようにご訂正ください(forループを使っているのにdo...whileループになっておりました) -
p. 249、下から6行目(2017.8.5)
未確定のプロミスを見つからなくなってしまう
↓
未確定のプロミスが見つからなくなってしまう
-
p. 34、表の下から3行目(2017.7.13)
"De Morgan's law: \u231 0(P \u22c0 Q) \u21D4 (\u 2310P) \u22c1 (\u2310Q)"
↓
"De Morgan's law: \u2310(P \u22c0 Q) \u21D4 (\u2310P) \u22c1 (\u2310Q)" -
p. 101、下から4行目(2017.7.13)
console.log(d); // ReferenceError: d is notdefined (エラー。dには代入されていない)
↓
console.log(d); // ReferenceError: d is not defined (エラー。dには代入されていない) -
p. 247、下から7行目(2017.7.13)
効率がよいないかな〜?
↓
効率がよくないかな〜? -
p. 324、本文下から2行目(2017.7.13)
返されプロパティのすべてについて
↓
返されるプロパティのすべてについて -
p. 348、本文下から9行目(2017.7.13)
'/home/jdoe/lj/linecount.js',
↓
'/home/jdoe/lj/argv.js', -
p. 354、12行目(2017.7.13)
const port = 8081;
↓
const port = 8080;
-
p. 107、15行目(2017.6.30)
arr[1] = getGreeting; // arr は[1, function getGreeting(), 2]になる
↓
arr[1] = getGreeting; // arr は[1, function getGreeting(), 3]になる
-
p. 65、図4-4(2017.6.26)
このリンク先の図のようにご訂正ください(do...whileループの範囲が大きすぎました。「remaining = totalBet」はループの範囲外です)
-
p. vii、下から1行目(2017.6.13)
著者も代わり
↓
著者も変わり
第2刷をお持ちの方のための正誤表はこれで終わりです。
第1刷をお持ちの方のための正誤表
以下は第1刷をお持ちの方のための正誤表です(すべての修正が含まれています)。 第2刷以降をお持ちの方は上をご覧ください。
日付(2022.1.12など)はこのページに記載した日です。
-
p. 171 sample/ch09/ex09-02-5/main.jsの13行目 (2022.6.16)
this._userGear = vaule;
↓
this._userGear = value; -
p. 177 冒頭のコードの4-5行目(example/ch09/ex09-02-8/main.js list3。2022.5.23)
console.log(c instanceof ......
↓
console.log(c2 instanceof ...... -
p. 44の2行目から5行目(example/ch03/ex03-11-6/main.js list1)の結果(2021.3.26)
Felinae
↓
Felidae -
p. 70、17行目(「4.2 JavaScript の制御フロー文」の2行上)のコード(2021.6.12)
if (100 < funds) console.log("意気揚々と船に戻る。 ");
↓
if (100 <= funds) console.log("意気揚々と船に戻る。 "); -
p. 95、下から5行目(表5-6の下の説明。2021.10.31)
(optionsが null または undefined の場合)
↓
(suppliedOptions が null または undefined の場合) -
p. 137の冒頭(example/ch07/ex07-08-4/main.jsの次)のコード(2021.1.5)
下記の図のように「}」の位置をご訂正ください
-
p. 147、example/ch08/ex08-02-9/main.jsのコード(2021.11.29。2022.1.12再修正)
MDNのページによると、指定する関数は1, 0, -1のいずれかの値を返すことになっているので、修正前の定義では正しく動作しません。node v16.13.0(2021年11月29日に確認)では結果が違ってしまいました。翻訳の際の確認時には「実行結果」のとおりに動いていたと思いますが、たまたまそうなっただけのようです。
... arr.sort((a, b) => a.name > b.name); // nameでソート ... arr.sort((a, b) => a.name[1] < b.name[1]); // nameの2文字目で逆順にソート ...
↓
... arr.sort((a, b) => a.name > b.name ? 1 : (a.name === b.name ? 0 : -1)); // nameでソート ... arr.sort((a, b) => a.name[1] < b.name[1] ? 1 : (a.name[1] === b.name[1] ? 0 : -1)); // nameの2文字目で逆順にソート ...
(すみません。最後の行の不等号の向き(緑色の不等号)が、2021.11.29の修正では逆でした。2022.1.12に修正しました) -
p. 290、一番下の行(17.11のlist1の下の説明。2022.1.12)
「(」「)」「*」をエスケープしています。
↓
「(」「)」「*」「+」をエスケープしています。
-
p. 306、図18-1(2022.1.12)
下部、ほぼ中央の<body>から<h1><div>などへの線が抜けていました。下図のようにご訂正ください。
-
p. 382、「C.3 プロジェクトルート」の2段落の先頭行(2022.1.12)
マンドラインの実行は
↓
コマンドラインの実行は
-
p. 137の冒頭(example/ch07/ex07-08-4/main.jsの次)のコード(2021.1.5)
下記の図のように「}」の位置をご訂正ください
-
p. 337、1行目(2020.6.29)
modules.export = calculate
↓
module.exports = calculate
-
p. 349、下から2行目(2019.2.10)
プログラムが起動されてディレクトリへ移動
↓
プログラムが起動されたディレクトリへ移動 -
p. 253、メモ(2018.12.26)
runGeneratorはこのURLの記事にあるのではなく、それを含む一連の記事のひとつ(Going Async With ES6 Generators)に書かれています。
grunはKyle Simpsonがジェネレータに関する一連の記事で取り上げたrunGenerator をベースにしています(http://davidwalsh.name/es6-generators)。
↓
grunはKyle Simpsonがジェネレータに関する一連の記事(http://davidwalsh.name/es6-generators)で取り上げたrunGenerator をベースにしています。 -
p. 253、メモの下(2018.12.26)
このジェネレータランナーをジェネレータ関数に渡すと、実行されます。
↓
このジェネレータランナーにジェネレータ関数を渡すと実行されます。
-
p. 42、下から4行目、およびp. 43、11行目(2018.6.26)
subfaimily
↓
subfamily -
p. 245、2行目(2018.5.7)
「;」があると.catchは構文エラーになってしまいます。thenがプロミスを返すので、ここで切ってはダメでした。
});
})
-
p. 397、5行目の後ろに段落追加(2018.4.6)
↓
この付録では識別子(変数名や関数名など)に日本語を用いています。英語の識別子を用いたバージョンは訳者のサポートページ(https://www.marlin-arms.com/support/ljs3/)からダウンロードできますので、ご希望の方はそちらをご覧ください。
-
p. 320、最後の「メモ」の2行目(2018.4.2)
たとえば要素eltにクリックのハンドラを追加するには次のように書けば済みます(ただし、ハンドラを一度にひとつしか登録できないという不都合な点はあります)。
↓
この方法では、たとえば要素eltにクリックのハンドラを追加するには次のように記述します。ハンドラを複数登録することができないのが、この方法の最大の弱点です。 -
p. 318、1行目(2018.4.2)
自作作するイベントハンドラでもこのプロパティを無視するのが普通です。
↓
自作作するイベントハンドラではこのプロパティを無視することができますし、また無視するのが普通です。 -
p. 264のリストの実行結果(2018.4.2)
別の時刻を指定した実行結果と混在させてしまったようです。すみません。
/* 日本で実行 */ const d = new Date(Date.UTC(1930, 4, 10, 10, 0)); /* UTC1930年5月10日午前10時0分 */ console.log(d.toLocaleDateString()); // 1930-05-10 console.log(d.toLocaleTimeString()); // 09:00:00 console.log(d.toTimeString()); // 09:00:00 GMT+0900 (JST) console.log(d.toUTCString()); // Sat, 10 May 1930 00:00:00 GMT const moment = require('moment-timezone'); console.log(moment(d).format("YYYY-MM-DD")); // 1930-05-10 console.log(moment(d).format("YYYY-MM-DD HH:mm")); // 1930-05-10 09:00 console.log(moment(d).format("YYYY-MM-DD HH:mm Z")); // 1930-05-10 09:00 +09:00 console.log(moment(d).format("YYYY-MM-DD HH:mm [UTC]Z")); // 1930-05-10 09:00 UTC+09:00 console.log(moment(d).format("dddd, MMMM [the] Do, YYYY")); // Saturday, May the 10th, 1930 console.log(moment(d).format("h:mm a")); // "5:00 pm" console.log(moment(d).format("YYYY年M月D日 hh:mmA")); // 1930年5月10日 07:00PM
/* 日本で実行 */ const d = new Date(Date.UTC(1930, 4, 10, 10, 0)); /* UTC1930年5月10日午前10時0分 */ console.log(d.toLocaleDateString()); // 1930-5-10 console.log(d.toLocaleTimeString()); // 19:00:00 console.log(d.toTimeString()); // 19:00:00 GMT+0900 (JST) console.log(d.toUTCString()); // Sat, 10 May 1930 10:00:00 GMT const moment = require('moment-timezone'); console.log(moment(d).format("YYYY-MM-DD")); // 1930-05-10 console.log(moment(d).format("YYYY-MM-DD HH:mm")); // 1930-05-10 19:00 console.log(moment(d).format("YYYY-MM-DD HH:mm Z")); // 1930-05-10 19:00 +09:00 console.log(moment(d).format("YYYY-MM-DD HH:mm [UTC]Z")); // 1930-05-10 19:00 UTC+09:00 console.log(moment(d).format("dddd, MMMM [the] Do, YYYY")); // Saturday, May the 10th, 1930 console.log(moment(d).format("h:mm a")); // 7:00 pm console.log(moment(d).format("YYYY年M月D日 hh:mmA")); // 1930年5月10日 07:00PM
-
p. 209、下から6行目(2018.4.2)
セットやオブジェクトが複数の値を供給するためのものである場合、イテレータとすることで for...of などの標準的な手法を使って処理を行うことができます。
↓
オブジェクトなどが複数の値を供給するためのものである場合、反復可能(iterable)にしたり、イテレータとしたりすることで、 for...of などの標準的な手法を使った処理が可能になります。 -
p. 127、example/ch07/ex07-02-2/main.jsの下の説明(2018.3.31)
原著の説明どおりにプログラムが動かなかったため、プログラムを修正して辻褄を合わせようとしたのですが、無理が生じてしまいましたので、書き換えました(2017.7.13に公開した訂正を置き換えてください)。
example/ch07/ex07-02-2/main.js
const x = 3; function f() { console.log(x); // 3 (これは動く) console.log(y); // ReferenceError: y is not defined (エラーになる) } f(); const y = 3;
変数xは関数fが定義されるときに存在していますがyは存在していません。fの定義の下でyを宣言しfを呼び出しています。fが呼び出されたときその本体の中でxはスコープにありますが、yはスコープにはありません。これが静的スコープの例です。関数fは、それが定義されたときにスコープにある識別子にのみアクセスできます。関数f()が呼び出されたところでスコープにある識別子ではありません。
example/ch07/ex07-02-2/main.js
const x = 3; function f() { console.log(x); // 3 (これは動く) console.log(y); // ReferenceError: y is not defined (エラーになる) } f(); const y = 3;
変数xは関数fが呼び出されるときに存在していますがyは存在していません。このため、上の例はエラーになってしまいます。 さて、最後の2行が次のように逆の順番に書かれているとどうなるでしょうか(example/ch07/ex07-02-3/main.js)。この場合fの呼び出しの前にyが存在することになり、エラーにならなくなります。関数fは、それが呼び出されたときにスコープにある識別子にはアクセスできるのです。
const y = 3; f();
-
p. 174、10行目(表現の修正です。2018.2.7)
たとえばareSimilarというメソッドを使ってメーカーとモデルが同じ場合にtrueを返すといった場合です。また、areSameは同じ車両番号をもっている場合にtrueを返すなどです。
↓
たとえばareSimilarというメソッドが「メーカーとモデルが同じ場合にtrueを返す」、あるいはareSameが「同じ車両番号をもっている場合にtrueを返す」などです。
-
p. 166、list1の下の本文7行目(下から17行目。2018.2.7)
現在ユーザーが指定しているギアを表すUserGearの2つです。
↓
現在ユーザーが指定しているギアを表すuserGearの2つです。 -
p. 234、11行目(2018.2.6)
問題はコールバックの実行時にはiは既に-1になっているのです。
↓
コールバックの実行時にはiは既に-1になっているのです。 -
p. 94、下から8行目(2017.12.1)
この例の2行目は、
↓
この例の3行目は、 -
p. 192、7行目(2017.11.27)
typeof演算子を使って、
↓
instanceof演算子を使って、 -
p. 21、下から4行目(2017.10.20)
// Hello, Word!
↓
// Hello, World! -
p. 335、6行目(2017.10.20)
ウェブ開発書
↓
ウェブ開発者 -
p. 46、1行目(2017.8.22)
用意されいます
↓
用意されています -
p. 52、下から3行目(2017.8.22)
fasle
↓
false
-
p. 159、表8-4、3行目filterの説明(2017.8.8)
条件を満たす要素の削除
↓
条件を満たさない要素の削除
-
p. 66、図4-5(2017.8.5)
このリンク先の図のようにご訂正ください(forループの条件判定の位置が変です。原文の図のチェックを怠りました。すみません) -
p. 68、図4-6(2017.8.5。2017.6.13に一度修正版を掲載しましたがこちらのほうが正確です)
このリンク先の図のようにご訂正ください(forループを使っているのにdo...whileループになっておりました) -
p. 249、下から6行目(2017.8.5)
未確定のプロミスを見つからなくなってしまう
↓
未確定のプロミスが見つからなくなってしまう
-
p. 34、表の下から3行目(2017.7.13)
"De Morgan's law: \u231 0(P \u22c0 Q) \u21D4 (\u 2310P) \u22c1 (\u2310Q)"
↓
"De Morgan's law: \u2310(P \u22c0 Q) \u21D4 (\u2310P) \u22c1 (\u2310Q)" -
p. 101、下から4行目(2017.7.13)
console.log(d); // ReferenceError: d is notdefined (エラー。dには代入されていない)
↓
console.log(d); // ReferenceError: d is not defined (エラー。dには代入されていない) -
p. 247、下から7行目(2017.7.13)
効率がよいないかな〜?
↓
効率がよくないかな〜? -
p. 324、本文下から2行目(2017.7.13)
返されプロパティのすべてについて
↓
返されるプロパティのすべてについて -
p. 348、本文下から9行目(2017.7.13)
'/home/jdoe/lj/linecount.js',
↓
'/home/jdoe/lj/argv.js', -
p. 354、12行目(2017.7.13)
const port = 8081;
↓
const port = 8080;
-
p. 107、15行目(2017.6.30)
arr[1] = getGreeting; // arr は[1, function getGreeting(), 2]になる
↓
arr[1] = getGreeting; // arr は[1, function getGreeting(), 3]になる
-
p. 65、図4-4(2017.6.26)
このリンク先の図のようにご訂正ください(do...whileループの範囲が大きすぎました。「remaining = totalBet」はループの範囲外です)
-
p. vii、下から1行目(2017.6.13)
著者も代わり
↓
著者も変わり
-
p. 385、18行目(2017.2.27)
$ git add README.re
↓
$ git add README.md
-
p. 143、10行目(8.2.1の下の行。2017.2.19)
最後の要素とは aarr[arr.length-1] のこと
↓
最後の要素とは arr[arr.length-1] のこと
-
p. 100、下から3行目(2017.2.19)
この例では問題は生じないのですが、配列に10より小さい数字ばかり入っていると、iの値が配列の添字をオーバーしてしまって結果がおかしくなります。
while(i<nums.length,
↓
while(i<nums.length &&
-
p. 100、下から5行目(2017.2.18)
/* nにはnum[i]の値が
↓
/* nにはnums[i]の値が
-
p. 74、3行目、example/ch04/ex04-02-2/main.jsの3行目の実行結果(2017.2.15)
0 (空白 9 個 +「0」)
↓
3 (空白 9 個 +「3」)
第1刷をお持ちの方のための正誤表はこれで終わりです。
ページトップへ戻る