JavaScript/ECMAScript言語仕様読解の手引
ECMAScript(ES)仕様書は、JavaScriptの動作や仕様を詳細に定義した文書です。しかし、仕様書には独特の表記や用語が多用されており、初めて読む人にとっては難解に感じられるかもしれません。この手引では、仕様書でよく使われる表記や用語を解説し、仕様書を読む際の手助けとなることを目指します。
@@識別子
表記
@@識別子
は、Well-Known Symbols(よく知られたシンボル)を表すために使用されます。これらのシンボルは、JavaScriptの組み込み動作をカスタマイズするために利用されます。
例:
@@iterator
(Symbol.iterator
)- オブジェクトが反復可能(iterable)であることを示すために使用されます。
- 例:
for...of
ループやスプレッド演算子で使用されます。
@@toStringTag
(Symbol.toStringTag
)- オブジェクトの文字列表現をカスタマイズするために使用されます。
- 例:
Object.prototype.toString
の出力を変更します。
使用例:
const obj = { [Symbol.iterator]() { // カスタムイテレータを実装 } };
%識別子%
表記
%識別子%
は、内部オブジェクトや内部プロパティを表すために使用されます。これらの識別子は、JavaScriptエンジンの内部実装に関連するもので、通常のJavaScriptコードから直接アクセスすることはできません。
例:
%Array.prototype%
Array
のプロトタイプオブジェクトを表します。
%Iterator.prototype%
- イテレータのプロトタイプオブジェクトを表します。
%Object.prototype%
Object
のプロトタイプオブジェクトを表します。
使用例:
仕様書内での使用例:
The %Iterator.prototype% object has a [[Prototype]] internal slot whose value is %Object.prototype%.
[[識別子]]
表記
[[識別子]]
は、内部スロット(Internal Slot)を表すために使用されます。内部スロットは、オブジェクトの内部状態を表すために使用される抽象的な概念で、JavaScriptコードから直接アクセスすることはできません。
例:
[[Prototype]]
- オブジェクトのプロトタイプチェーンを表します。
[[Iterable]]
- オブジェクトが反復可能かどうかを示します。
[[Value]]
- プリミティブ値の内部表現を表します。
使用例:
仕様書内での使用例:
The %Iterator.prototype% object has a [[Prototype]] internal slot whose value is %Object.prototype%.
%識別子%
と @@識別子
の違い
%識別子%
は、内部オブジェクトや内部プロパティを表すために使用されます。@@識別子
は、Well-Known Symbols(よく知られたシンボル)を表すために使用されます。
例:
%Array.prototype%
は、Array
のプロトタイプオブジェクトを表します。@@iterator
は、Symbol.iterator
を表し、反復可能オブジェクトの動作を定義します。
その他の表記
?
と!
の表記?
は、操作が例外をスローする可能性があることを示します。!
は、操作が例外をスローしないことを示します。
𝔽(value)
- 数値を表す内部的な表現です。
例:
Let numLimit be ? ToNumber(limit).
この場合、ToNumber(limit)
は例外をスローする可能性があります。
仕様書を読む際のポイント
- 表記の意味を理解する: 仕様書で使われる表記(
@@
、%
、[[ ]]
など)の意味を把握することが重要です。 - 内部動作を理解する: 仕様書は、JavaScriptの内部動作を詳細に記述しています。内部スロットや内部メソッドの役割を理解することで、言語の深い部分まで理解できます。
- 例を参照する: 仕様書には多くの例が記載されています。これらの例を実際のコードに落とし込むことで、理解が深まります。
まとめ
ECMAScript仕様書は、JavaScriptの動作を深く理解するための重要なリソースです。しかし、その独特の表記や用語は、初めて読む人にとっては難解に感じられるかもしれません。この手引が、仕様書を読む際の一助となれば幸いです。仕様書を読み解くことで、JavaScriptの動作や内部的な仕組みを深く学ぶことができます。
カテゴリ:JavaScript