3.0.0: ECMAScript 2021対応
3.0.0
JavaScript Primerのウェブ版がECMAScript 2021に対応しました 🎉
JavaScript Primerのウェブサイトから閲覧できます。
- ウェブサイト: https://jsprimer.net/
- 対応のサマリIssue: ES2021の対応 · Issue #1220 · asciidwango/js-primer
- 昨年のES2020のリリースノート: Release 2.0.0: ECMAScript 2020対応
JavaScript Primerについて
JavaScript Primerは、これからJavaScriptを学びたい人が、ECMAScript 2015以降をベースにして一からJavaScriptを学べる書籍です。
ECMAScriptの仕様は毎年アップデートされるため、JavaScript Primerも毎年それに対応できるように継続してアップデートしています。
GitHubで更新情報を購読したい人は、asciidwango/js-primerリポジトリを"Watch"してください。
"Custom"からリリースのみを購読も可能です。
更新通知をメールで受け取り方は、次のフォームからメールアドレスを登録してください。
書籍への支援について
継続的にアップデートするために、書籍への支援はいつでも歓迎しています。
JavaScript PrimerはECMAScriptのアップデートに追従したり、現実の使い方を反映するために、継続してアップデートしています。
GitHub Sponsorsで著者を支援できます。
また、書籍版へのレビューを書くことも支援に繋がります。
GitHubのDiscussions(掲示板)の他の人の質問に答えたり、JSPrimerを読んだ感想を書くことも支援になります。
Discussionsのガイドラインは次のスレッドにまとめられています。
書籍に対してIssueを立てたり、Pull Requestを送ったりして直接的に支援もできます。
IssueやPull Requestについては、次のページを参照してください。
ECMAScript 2021
The 121st General Assembly held as a virtual meeting on 22 June 2021 approved the following documents:
ECMA-262 12th edition – ECMAScript® 2021 language specification
-- https://www.ecma-international.org/news/ecma-international-approves-new-standards-4/
ECMAScript 2021は、2021年6月にEcma Internationalで正式に承認された仕様です。
ECMAScriptの仕様策定のプロセスについては、次のページを参照してください。
3.0.0の変更点
3.0.0では次の項目について書籍の内容を変更、追加しています。
String#replaceAll
- 対象ページ: https://jsprimer.net/basic/string/#replace-delete
- Issue: #1310
- PR: #1314
ES2021では、String#replaceAll
メソッドというマッチした文字列を全て置換するメソッドが追加されました。
String#replace
メソッドは、最初に一致したものだけが置換されますが、String#replaceAll
メソッドでは一致したものがすべて置換されます。
今までもString#replace
メソッドと正規表現のg
(global)フラグを使うことで、繰り返し置換が可能でした。
しかし、正規表現では?
や.
などは特殊な意味を持つため、エスケープが必要となります。
String#replaceAll
メソッドでは、ただの文字列として渡したものを繰り返し置換ができるため、エスケープが不要な点が主な違いです。
const str = "???";
// replaceメソッドの場合は、正規表現の特殊文字はエスケープが必要となる
console.log(str.replace(/\?/g, "!")); // => "!!!"
// replaceAllメソッドでは、文字列として渡した検索文字列を全て置換する
console.log(str.replaceAll("?", "!")); // => "!!!"
詳細
- Proposal: https://github.com/tc39/proposal-string-replaceall
- MDN: https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll
- 別の書籍での解説: https://exploringjs.com/impatient-js/ch_regexps.html#replace-replaceAll
Numeric Separators
- 対象ページ:
- Issue: #1311
- PR: #1312
- 変更点
- ES2021でサポートされたNumeric Separatorsを追加
- ビット演算子を書き直し、ビット演算の解説の追加、図の追加など
- チートシートにNumeric Separatorsを追加
ES2021では、Numeric Separatorsという_
を数値リテラルの区切り文字として利用できる構文が追加されました。
数値リテラルでは数値が大きくなるほど、桁数の見間違いなどが発生しやすくなります。
const largeNumber = 1000000000000;
Numeric Separatorsでは、数値リテラルの区切り文字として_
が追加できます。
数値リテラルを評価する際には、_
は単純に無視されるため意味の違いはありません。
const largeNumber = 1_000_000_000_000;
JavaScript Primer 3.0では、このNumeric Separatorsの解説をデータ型とリテラルに追加しています。
また、ビット演算では数値リテラルの桁数が多くなりやすいです。
そのため、演算子のビット演算のセクションをNumeric Separatorsを使って書き直し、図などを入れています。
📝 演算子の章は肥大化しやすいので、今後のバージョンで整理するかもしれません。
ビット演算はユースケースでは利用していないため、ページとして分ける可能性もありそうです。
チートシートのES2021の対応
- 対象ページ:
- 付録: JavaScriptチートシート: https://jsprimer.net/cheetsheet/
チートシートにES2021で増えた構文を追加。
- Numeric Separators
含まれなかったES2021の変更点
次のES2021の変更は、現時点のJavaScript Primerでは含まれていません。
JavaScriptのリファレンスを作ることは本書の目的ではないため、
この本のユースケースで利用する可能性が少ないものに関しては取り入れていません。
Promise.any
とAggregateError
- コメント: #1220 (comment)
WeakRefs
- コメント: #1220 (comment)
- Logical assignment operators
&&=
、||=
、??=
のような論理演算子と代入演算子の組み合わせ- コメント: #1220 (comment)
- 仮PR: #1334
詳細はES2021の対応 · Issue #1220 · asciidwango/js-primerを参照してください。
その他の修正
- いろいろなtypoの修正
- usecase/nodecli: コマンドライン引数のデフォルト値を ?? でセットする #1264
- usecase/todoapp: Todo App の HTML に DOCTYPE がないことの見た目の影響 #1263