?
u
m
/
p
1-9
0
`
本仕様書のアルゴリズムは、それぞれ型が結び付けられた値を操作します。値の型の種類は本節で定義されるものだけです。型はさらに
ECMAScript言語型は、ECMAScriptプログラマーがECMAScript言語で直接操作する値に対応します。ECMAScript言語型には、Undefined、Null、Boolean、String、Symbol、Number、BigInt、Objectがあります。ECMAScript言語値は、ECMAScript言語型によって特徴付けられる値です。
Undefined型は、
Null型は、
Boolean型は、
String型は、0個以上の16ビット符号なし
String内容を解釈しないECMAScript操作は、追加の意味論を持ちません。String値を解釈する操作は、各要素を単一のUTF-16コード単位として扱います。ただし、ECMAScriptはこれらのコード単位の値や相互関係を制限しないため、String内容をUTF-16でエンコードされたUnicodeコードポイントの並びとしてさらに解釈する操作は、不正な部分列も考慮する必要があります。こうした操作では、数値が0xD800から0xDBFFまでの
String.prototype.normalize
関数(String.prototype.localeCompare
(
この設計の理由は、Stringの実装をできるだけ単純かつ高性能に保つことでした。ECMAScriptソーステキストがNormalized Form Cであれば、文字列リテラルもUnicodeエスケープシーケンスを含まない限り正規化が保証されます。
本仕様では、「A、B...の文字列連結」(各引数がString値・コード単位・コード単位列)は、各引数(順番通り)のコード単位を連結した並びを持つString値を指します。
「SのinclusiveStartからexclusiveEndまでの部分文字列」(SはString値またはコード単位列、inclusiveStartとexclusiveEndは
「ASCIIワード文字」は、Unicode基本ラテンブロックの全ての英字・数字とU+005F(LOW LINE)のみからなる、次のString値を指します:
歴史的事情により、様々なアルゴリズムで意味を持ちます。
The abstract operation StringIndexOf takes arguments string (String), searchValue (String), and fromIndex (非負
searchValueが空文字列でかつfromIndex ≤ stringの長さなら、このアルゴリズムはfromIndexを返します。空文字列は、文字列内のすべての位置(最後のコード単位の後も含む)で「見つかる」ものとみなされます。
このアルゴリズムは、fromIndex + searchValueの長さがstringの長さを超える場合、必ず
The abstract operation StringLastIndexOf takes arguments string (String), searchValue (String), and fromIndex (非負
searchValueが空文字列の場合、このアルゴリズムはfromIndexを返します。空文字列は、文字列内のすべての位置(最後のコード単位の後も含む)で「見つかる」ものとみなされます。
Symbol型は、Objectプロパティのキーとして使える全ての非String値の集合です(
各Symbolは一意で不変です。
各Symbolは、不変の[[Description]]内部スロットを持ち、その値はStringまたは
Well-known Symbolは、本仕様のアルゴリズムから明示的に参照される組み込みのSymbol値です。これらは、値が仕様アルゴリズムの拡張ポイントとなるプロパティのキーとして使われることが一般的です。特に記載がない限り、Well-known Symbol値は全
本仕様では、Well-known Symbolは標準の
仕様名 | [[Description]] | 値/目的 |
---|---|---|
%Symbol.asyncIterator% |
|
オブジェクトのデフォルト非同期イテレータを返すメソッド。for -await -of 文の意味論から呼び出されます。
|
%Symbol.hasInstance% |
|
instanceof 演算子の意味論から呼び出されます。
|
%Symbol.isConcatSpreadable% |
|
真の場合、そのオブジェクトがArray.prototype.concat |
%Symbol.iterator% |
|
オブジェクトのデフォルトイテレータを返すメソッド。for-of文の意味論から呼び出されます。 |
%Symbol.match% |
|
正規表現で文字列とマッチさせるメソッド。String.prototype.match |
%Symbol.matchAll% |
|
正規表現に一致するすべてのマッチをイテレータで返すメソッド。String.prototype.matchAll |
%Symbol.replace% |
|
文字列の一致部分を置換する正規表現メソッド。String.prototype.replace |
%Symbol.search% |
|
正規表現と一致する文字列内のインデックスを返すメソッド。String.prototype.search |
%Symbol.species% |
|
派生オブジェクトの作成に使われる |
%Symbol.split% |
|
正規表現で一致するインデックスで文字列を分割するメソッド。String.prototype.split |
%Symbol.toPrimitive% |
|
オブジェクトを対応するプリミティブ値に変換するメソッド。ToPrimitive |
%Symbol.toStringTag% |
|
オブジェクトのデフォルト文字列表現の生成に使われるString値のプロパティ。組み込みメソッドObject.prototype.toString |
%Symbol.unscopables% |
|
自身および継承したwith 環境バインディングから除外される |
ECMAScriptには組み込み数値型が2つあります:
数値型は一般的に精度の損失や切り捨てなしに変換できないため、ECMAScript言語ではこれらの型間の暗黙的な変換は提供されません。プログラマーは、別の型を必要とする関数を呼び出す際に、型間の変換を明示的にNumber
やBigInt
関数で行う必要があります。
ECMAScriptの第1版以降、特定の演算子では精度が失われたり切り捨てられる暗黙の数値変換が提供されてきました。これらの従来の暗黙変換は後方互換性のために維持されていますが、BigIntには提供されていません。これはプログラマーのミスの機会を最小限に抑えるためであり、将来版での一般化された値型の選択肢を残すためです。
Number型は18,437,736,874,454,810,627個(すなわちNaN
によって生成されます。)実装によっては外部コードが異なるNaN値を検出できる場合がありますが、その挙動は実装依存です。ECMAScriptコードからはすべての
他に2つの特別な値があり、+Infinity
(または単にInfinity
)と-Infinity
で生成されます。)
残りの18,437,736,874,454,810,624個(すなわち
+0
(または単に0
)と-0
で生成されます。)
18,437,736,874,454,810,622個(すなわち
18,428,729,675,200,069,632個(すなわち
ここで、sは1または-1、mは252(含む)から253(含まない)までの
残りの9,007,199,254,740,990個(すなわち
ここで、sは1または-1、mは0(含まない)から252(含まない)までの
絶対値が253以下のすべての正負の
この仕様では、「xのNumber値」という表現は、xが実数(πのような無理数も含む)であるとき、次の方法で選ばれたNumber値を意味します。Number型の
+∞のNumber値は
一部のECMAScript演算子は、
The abstract operation Number::unaryMinus takes argument x (a Number) and returns a Number. It performs the following steps when called:
The abstract operation Number::bitwiseNOT takes argument x (a Number) and returns an integral Number. It performs the following steps when called:
The abstract operation Number::exponentiate takes arguments base (a Number) and exponent (a Number) and returns a Number. baseをexponent乗した結果を表す実装依存の近似値を返す。 It performs the following steps when called:
baseが**
演算の結果は、
The abstract operation Number::multiply takes arguments x (a Number) and y (a Number) and returns a Number. xとyの積を
The abstract operation Number::divide takes arguments x (a Number) and y (a Number) and returns a Number. x(被除数)とy(除数)の商を
The abstract operation Number::remainder takes arguments n (a Number) and d (a Number) and returns a Number. n(被除数)とd(除数)の暗黙的な割り算から余りを返します。 It performs the following steps when called:
CやC++の剰余演算子は
%
演算子)は%
はJavaのThe abstract operation Number::add takes arguments x (a Number) and y (a Number) and returns a Number. xとyの和を
The abstract operation Number::subtract takes arguments x (a Number) and y (a Number) and returns a Number. 減算を行い、x(被減数)とy(減数)の差を返します。 It performs the following steps when called:
x - y
の結果は常にx + (-y)
の結果と同じになります。
The abstract operation Number::leftShift takes arguments x (a Number) and y (a Number) and returns an integral Number. It performs the following steps when called:
The abstract operation Number::signedRightShift takes arguments x (a Number) and y (a Number) and returns an integral Number. It performs the following steps when called:
The abstract operation Number::unsignedRightShift takes arguments x (a Number) and y (a Number) and returns an integral Number. It performs the following steps when called:
The abstract operation Number::lessThan takes arguments x (a Number) and y (a Number) and returns a Boolean or
The abstract operation Number::equal takes arguments x (a Number) and y (a Number) and returns a Boolean. It performs the following steps when called:
The abstract operation Number::sameValue takes arguments x (a Number) and y (a Number) and returns a Boolean. It performs the following steps when called:
The abstract operation Number::sameValueZero takes arguments x (a Number) and y (a Number) and returns a Boolean. It performs the following steps when called:
The abstract operation NumberBitwiseOp takes arguments op (&
, ^
, or |
), x (a Number), and y (a Number) and returns an integral Number. It performs the following steps when called:
The abstract operation Number::bitwiseAND takes arguments x (a Number) and y (a Number) and returns an integral Number. It performs the following steps when called:
&
, x, y)を返す。The abstract operation Number::bitwiseXOR takes arguments x (a Number) and y (a Number) and returns an integral Number. It performs the following steps when called:
^
, x, y)を返す。The abstract operation Number::bitwiseOR takes arguments x (a Number) and y (a Number) and returns an integral Number. It performs the following steps when called:
|
, x, y)を返す。The abstract operation Number::toString takes arguments x (a Number) and radix (an integer in the inclusive interval from 2 to 36) and returns a String. xをradix進法の位置記数法でStringとして表現します。r進法での数字は
1.2e+3
)で表現される。ECMAScript実装者は、David M. Gayによる浮動小数点数の2進-10進変換に関する論文およびコードが参考になるかもしれません:
Gay, David M. Correctly Rounded Binary-Decimal and Decimal-Binary Conversions. Numerical Analysis, Manuscript 90-10. AT&T Bell Laboratories (Murray Hill, New Jersey). 1990年11月30日。
https://ampl.com/_archive/first-website/REFS/rounding.pdf。関連コード:
http://netlib.sandia.gov/fp/dtoa.c および
http://netlib.sandia.gov/fp/g_fmt.c。また各netlib
ミラーサイトにもあります。
BigInt型は
The abstract operation BigInt::unaryMinus takes argument x (a BigInt) and returns a BigInt. It performs the following steps when called:
The abstract operation BigInt::bitwiseNOT takes argument x (a BigInt) and returns a BigInt. xの1の補数を返します。 It performs the following steps when called:
The abstract operation BigInt::exponentiate takes arguments base (a BigInt) and exponent (a BigInt) and returns either a
The abstract operation BigInt::multiply takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
The abstract operation BigInt::divide takes arguments x (a BigInt) and y (a BigInt) and returns either a
The abstract operation BigInt::remainder takes arguments n (a BigInt) and d (a BigInt) and returns either a
The abstract operation BigInt::add takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
The abstract operation BigInt::subtract takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
The abstract operation BigInt::leftShift takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
The abstract operation BigInt::signedRightShift takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
The abstract operation BigInt::unsignedRightShift takes arguments x (a BigInt) and y (a BigInt) and returns a
The abstract operation BigInt::lessThan takes arguments x (a BigInt) and y (a BigInt) and returns a Boolean. It performs the following steps when called:
The abstract operation BigInt::equal takes arguments x (a BigInt) and y (a BigInt) and returns a Boolean. It performs the following steps when called:
The abstract operation BinaryAnd takes arguments x (0 or 1) and y (0 or 1) and returns 0 or 1. It performs the following steps when called:
The abstract operation BinaryOr takes arguments x (0 or 1) and y (0 or 1) and returns 0 or 1. It performs the following steps when called:
The abstract operation BinaryXor takes arguments x (0 or 1) and y (0 or 1) and returns 0 or 1. It performs the following steps when called:
The abstract operation BigIntBitwiseOp takes arguments op (&
, ^
, or |
), x (a BigInt), and y (a BigInt) and returns a BigInt. It performs the following steps when called:
&
なら|
なら^
である。&
なら|
ならThe abstract operation BigInt::bitwiseAND takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
&
, x, y)を返す。The abstract operation BigInt::bitwiseXOR takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
^
, x, y)を返す。The abstract operation BigInt::bitwiseOR takes arguments x (a BigInt) and y (a BigInt) and returns a BigInt. It performs the following steps when called:
|
, x, y)を返す。The abstract operation BigInt::toString takes arguments x (a BigInt) and radix (an integer in the inclusive interval from 2 to 36) and returns a String. xをradix進法の位置記数法でStringとして表現します。r進法でのBigIntの表現に使われる数字は
Object型(単に「オブジェクト」とも呼ばれる)の各インスタンスは、プロパティの集合を表します。各プロパティはデータプロパティまたはアクセサプロパティのいずれかです:
オブジェクトのプロパティは
整数インデックスは、
全てのオブジェクトは論理的にはプロパティの集合ですが、プロパティへのアクセスや操作の意味論が異なる複数の形式のオブジェクトがあります。複数のオブジェクト形式の定義については
さらに、一部のオブジェクトは呼び出し可能(callable)であり、これらは関数または
属性は、この仕様において
属性名 | 存在するプロパティの種類 | 値のドメイン | デフォルト値 | 説明 |
---|---|---|---|---|
[[Value]] |
|
|
|
プロパティへのgetアクセス時に取得される値。 |
[[Writable]] |
|
真偽値 |
|
|
[[Get]] |
|
オブジェクトまたは |
|
値がオブジェクトの場合、 |
[[Set]] |
|
オブジェクトまたは |
|
値がオブジェクトの場合、 |
[[Enumerable]] |
|
真偽値 |
|
|
[[Configurable]] |
|
真偽値 |
|
|
ECMAScriptでは、オブジェクトの実際の意味論は内部メソッドと呼ばれるアルゴリズムによって定義されます。ECMAScriptエンジンの各オブジェクトには、そのランタイム動作を定義する内部メソッドの集合が関連付けられています。これらの内部メソッドはECMAScript言語の一部ではなく、説明目的で仕様に定義されています。ただし、実装内の各オブジェクトは、関連付けられた内部メソッドで指定された通りに振る舞わなければなりません。その実現方法は実装によって異なります。
内部メソッド名は多態的です。つまり、同じ内部メソッド名が呼び出されても、異なるオブジェクト値は異なるアルゴリズムを実行することがあります。内部メソッドが呼び出される実際のオブジェクトがその呼び出しの「ターゲット」です。実行時にアルゴリズムの実装がオブジェクトのサポートしていない内部メソッドを使おうとした場合、
内部スロットは、オブジェクト、Symbol、プライベート名に関連付けられた内部状態であり、様々なECMAScript仕様アルゴリズムで使われます。内部スロットはプロパティではなく、継承もされません。特定の内部スロット仕様によっては、状態が任意の
全てのオブジェクトは[[PrivateElements]]という名前の内部スロットを持ちます。これはPrivateElementsのリストであり、そのオブジェクトのプライベートフィールド、メソッド、アクセサの値を表します。初期状態では空のリストです。
内部メソッドと内部スロットは本仕様中では[[ ]]で囲まれた名前で識別されます。
通常オブジェクトは、次の全ての条件を満たすオブジェクトです:
エキゾチックオブジェクトは、
本仕様では、
パラメータに加え、内部メソッドは呼び出し対象オブジェクト(ターゲット)に常にアクセスできます。
内部メソッドは必ず
内部メソッド | シグネチャ | 説明 |
---|---|---|
[[GetPrototypeOf]] | ( ) → Object | Null |
このオブジェクトに継承プロパティを提供するオブジェクトを決定する。 |
[[SetPrototypeOf]] | (Object | Null) → Boolean |
このオブジェクトを継承プロパティを提供する他のオブジェクトと関連付ける。 |
[[IsExtensible]] | ( ) → Boolean | このオブジェクトに追加プロパティの追加が許可されているかどうかを判定する。 |
[[PreventExtensions]] | ( ) → Boolean |
このオブジェクトに新しいプロパティ追加を制御する。操作が成功した場合は |
[[GetOwnProperty]] |
(propertyKey) → Undefined | |
このオブジェクト自身のプロパティでキーがpropertyKeyであるもののプロパティ記述子を返す。なければ |
[[DefineOwnProperty]] | (propertyKey, PropertyDescriptor) → Boolean |
キーがpropertyKeyである自身のプロパティを、PropertyDescriptorで記述される状態に新規作成または変更する。そのプロパティが作成/更新できれば |
[[HasProperty]] | (propertyKey) → Boolean | このオブジェクトがpropertyKeyをキーに持つ自身または継承プロパティを既に持っているかどうかを示す真偽値を返す。 |
[[Get]] | (propertyKey, Receiver) → any |
このオブジェクトからpropertyKeyのプロパティ値を返す。プロパティ値取得のためにECMAScriptコードの実行が必要な場合、Receiverが |
[[Set]] | (propertyKey, value, Receiver) → Boolean |
このオブジェクトのpropertyKeyプロパティ値をvalueに設定する。値の設定にECMAScriptコードの実行が必要な場合、Receiverが |
[[Delete]] | (propertyKey) → Boolean |
このオブジェクト自身からpropertyKeyをキーに持つプロパティを削除する。削除できずまだ存在する場合は |
[[OwnPropertyKeys]] |
( ) → |
オブジェクト自身の全ての |
内部メソッド | シグネチャ | 説明 |
---|---|---|
[[Call]] | (any, anyのリスト) → any |
このオブジェクトに関連付けられたコードを実行する。関数呼び出し式を通して呼び出される。引数は |
[[Construct]] | (anyのリスト, Object) → Object |
オブジェクトを生成する。new 演算子またはsuper 呼び出しで起動される。最初の引数はsuper 呼び出しの引数のリスト。2番目の引数はnew 演算子が最初に適用されたオブジェクト。[[Construct]]を実装するオブジェクトは |
ECMAScriptエンジンのオブジェクトの内部メソッドは、以下に示す不変条件リストに準拠しなければなりません。通常のECMAScriptオブジェクトおよび本仕様の全標準
実装が提供する
実装は、本質的内部メソッドの不変条件を強制しないまま、その機能を代替インターフェイスで提供するなどして、不変条件を回避できるようにしてはなりません。
いかなる内部メソッドも、以下いずれかの
内部メソッドはcontinue完了、break完了、return完了を返してはなりません。
オブジェクトのプロトタイプチェーンは
3番目の不変条件の結果として、プロパティが
著名な組み込みオブジェクト(well-known intrinsics)は、本仕様のアルゴリズムで明示的に参照され、通常はレルムごとに異なる同一性を持つ組み込みオブジェクトです。特に明示されていない限り、各組み込みオブジェクトはレルムごとに類似したオブジェクトの集合に対応します。
本仕様内では、%name%のような参照は、現在のレルムに関連付けられた対応する名前の組み込みオブジェクトを意味します。%name.a.b%のような参照は、組み込みオブジェクト%name%の
追加のエントリは
仕様型は、ECMAScript言語構造や
Enumは仕様内部の値であり、ECMAScriptコードから直接観測することはできません。Enumは
List型は、new
式や関数呼び出し、その他値の単純な順序付きリストが必要なアルゴリズムにおける引数リスト評価を説明するために使用されます。List型の値は個々の値を含むリスト要素の順序付き列です。これらの列の長さは任意です。リストの要素は0始まりのインデックスでランダムにアクセスできます。記法上の便宜として、List要素へのアクセスには配列風の構文が使えます。例えば、arguments[2]はList_arguments_の3番目の要素を表します。
アルゴリズムがListの要素を順序指定なしで反復する場合、使用される順序はList内の要素の順序です。
この仕様書内の記法上の便宜として、リテラル構文を用いて新しいList値を表現できます。例えば、« 1, 2 »は2つの要素を持ち、それぞれ特定の値で初期化されているList値を定義します。新しい空のListは« »で表現できます。
この仕様書では、「A、B、...のリスト結合」という表現(各引数は空リストの場合もある)は、各引数の要素(順序通り)を連結した新しいList値を表します。
List of Stringsに対して「辞書式コードユニット順で並べ替える」とは、短い文字列の長さまで各コードユニットの数値で比較し、全てが等しければ短い方を先に並べることを意味します。これは
Record型は、この仕様のアルゴリズム内でデータ集合を記述するために使われます。Record型の値は1つ以上の名前付きフィールドからなります。各フィールドの値は
記法上の便宜として、Record値はオブジェクトリテラル風の構文で表現できます。例えば、{ [[Field1]]: 42, [[Field2]]:
仕様本文やアルゴリズムでは、Record値の特定フィールドを参照するためにドット記法が使われます。例えば、Rが前述のRecordの場合、R.[[Field2]]は「Rの[[Field2]]という名前のフィールド」を意味します。
よく使われるRecordフィールド組み合わせのスキーマには名前が付けられ、その名前をリテラルRecord値の前に付けて、記述している特定の集合種別を識別することができます。例:PropertyDescriptor { [[Value]]: 42, [[Writable]]:
Set型は、メモリモデルで使用するための順序なし要素の集合を説明するために使われます。これはECMAScriptの同名コレクション型とは異なります。区別のため、ECMAScriptコレクションのインスタンスは常に「Setオブジェクト」と呼ばれます。Set型の値は単純な要素集合であり、同じ要素が複数回現れることはありません。Setには要素の追加・削除ができます。Set同士の和集合、積集合、差集合も可能です。
Relation型は、Setに対する制約を説明するために使われます。Relation型の値は、その値域からの順序付きペアのSetです。例えば、イベントに対するRelationは、イベントの順序付きペアの集合です。Relation_R_と値域内の2つの値a、bについて、a R bは順序付きペア(a, b)がRに含まれることの略記です。Relationがある条件に関して最小Relationであるとは、その条件を満たす最小のRelationであることを意味します。
狭義半順序は、Relation値Rが以下を満たす場合です。
Rの値域内の全てのa、b、cについて:
上記2つの性質は、それぞれ反射性の否定(非自反性)と推移性と呼ばれます。
狭義全順序は、Relation値Rが以下を満たす場合です。
Rの値域内の全てのa、b、cについて:
上記3つの性質は、それぞれ全域性、非自反性、推移性と呼ばれます。
Completion Record仕様型は、値や制御フロー(break
、continue
、return
、throw
による非局所的な制御移動)のランタイム伝播などを説明するために使われます。
Completion Recordは
フィールド名 | 値 | 意味 |
---|---|---|
[[Type]] |
|
発生したcompletionの種類。 |
[[Value]] |
|
生成された値。 |
[[Target]] |
Stringまたは |
指定制御移動のターゲットラベル。 |
Completion Recordを指すために次の略称が用いられることがあります。
この仕様で定義される呼び出し可能オブジェクトは、normal completionまたはthrow completionのみを返します。それ以外のCompletion Recordを返す場合は編集上の誤りです。
The abstract operation NormalCompletion takes argument value (
The abstract operation ThrowCompletion takes argument value (
The abstract operation ReturnCompletion takes argument value (
The abstract operation UpdateEmpty takes arguments completionRecord (
Reference Record型は、delete
、typeof
、代入演算子、super
キーワードやその他の言語機能の動作を説明するために使われます。例えば、代入の左辺オペランドはReference Recordを生成することが期待されます。
Reference Recordは解決済みの名前や(未解決の場合もある)プロパティバインディングであり、そのフィールドは
フィールド名 | 値 | 意味 |
---|---|---|
[[Base]] | バインディングを保持する値または |
|
[[ReferencedName]] | バインディング名。[[Base]]値が |
|
[[Strict]] | 真偽値 | |
[[ThisValue]] | super キーワードで表現されたプロパティバインディングを表す(Super Reference Record)となり、[[Base]]値は |
この仕様でReference Recordを操作するのに使われる
The abstract operation IsPropertyReference takes argument V (
The abstract operation IsUnresolvableReference takes argument V (
The abstract operation IsSuperReference takes argument V (
The abstract operation IsPrivateReference takes argument V (
The abstract operation GetValue takes argument V (
The abstract operation PutValue takes arguments V (
The abstract operation GetThisValue takes argument V (
The abstract operation InitializeReferencedBinding takes arguments V (
The abstract operation MakePrivateReference takes arguments baseValue (
Property Descriptor型は、オブジェクトプロパティ属性の操作や具現化を説明するために使われます。Property Descriptorは0個以上のフィールドを持つ
Property Descriptor値は、特定のフィールドの存在や使用に基づきデータProperty DescriptorとアクセサProperty Descriptorに分類できます。[[Value]]または[[Writable]]フィールドがあるものはデータProperty Descriptor、[[Get]]または[[Set]]フィールドがあるものはアクセサProperty Descriptorです。全てのProperty Descriptorは[[Enumerable]]や[[Configurable]]フィールドを持てます。Property Descriptor値はデータProperty DescriptorとアクセサProperty Descriptorの両方になることはできませんが、どちらでもない場合もあり(その場合は汎用Property Descriptor)、完全なProperty DescriptorはアクセサまたはデータProperty Descriptorのいずれかで、かつ対応する全フィールドが
この仕様でProperty Descriptor値を操作するために使われる
The abstract operation IsAccessorDescriptor takes argument Desc (
The abstract operation IsDataDescriptor takes argument Desc (
The abstract operation IsGenericDescriptor takes argument Desc (
The abstract operation FromPropertyDescriptor takes argument Desc (
The abstract operation ToPropertyDescriptor takes argument Obj (
The abstract operation CompletePropertyDescriptor takes argument Desc (
Abstract Closure仕様型は、アルゴリズム手順と値の集合をまとめて参照するために使われます。Abstract Closureはメタ値であり、closure(arg1, arg2)のような関数適用スタイルで呼び出されます。
Abstract Closureを生成するアルゴリズム手順では、"capture"という動詞とエイリアスのリストで値をキャプチャします。Abstract Closure生成時には各エイリアスに関連付けられた値をキャプチャします。Abstract Closureの呼び出しで実行されるアルゴリズム手順には、キャプチャした値をエイリアス名で参照します。
Abstract Closureが
Abstract Closureは他のアルゴリズムの一部としてインラインで生成され、次の例のように表されます。
Data Block仕様型は、個別かつ可変なバイトサイズ(8ビット)の数値値の列を説明するために使われます。バイト値は0から255までの
記法上の便宜として、Data Block値の個々のバイトへのアクセスには配列風の構文が使えます。この記法は、Data Block値を0ベースの
複数のエージェントが同時に参照可能なメモリ上のデータブロックはShared Data Blockと呼ばれます。Shared Data Blockは同一性(Shared Data Block値の等価性判定のため)はアドレス非依存です。つまり、ブロックがどの仮想アドレスにマップされているかではなく、そのブロックが表すメモリ位置集合に結びついています。2つのデータブロックは、含む位置集合が等しい場合のみ等価であり、そうでなければ等価ではなく、位置集合の共通部分は空です。Shared Data BlockはData Blockと区別されます。
Shared Data Blockの意味論は、メモリモデルによるShared Data Blockイベントを使って定義されます。以下の
Shared Data Blockイベントは
この仕様でData Block値を操作するために使われる
The abstract operation CreateByteDataBlock takes argument size (非負
The abstract operation CreateSharedByteDataBlock takes argument size (非負
The abstract operation CopyDataBlockBytes takes arguments toBlock (
PrivateElement型は、privateクラスフィールド・メソッド・アクセサの仕様で使用される
PrivateElement型の値は、
フィールド名 | [[Kind]]フィールドが存在する場合の値 | 値 | 意味 |
---|---|---|---|
[[Key]] | 全て |
|
フィールド・メソッド・アクセサの名前。 |
[[Kind]] | 全て |
|
要素の種類。 |
[[Value]] |
|
|
フィールドの値。 |
[[Get]] |
|
|
privateアクセサのgetter。 |
[[Set]] |
|
|
privateアクセサのsetter。 |
ClassFieldDefinition型はクラスフィールドの仕様で使用される
ClassFieldDefinition型の値は、
フィールド名 | 値 | 意味 |
---|---|---|
[[Name]] |
|
フィールドの名前。 |
[[Initializer]] |
ECMAScript |
フィールドの初期化子(あれば)。 |
Private Name仕様型は、他のPrivate Nameと区別される(たとえ他と区別できない場合でも)グローバルに一意な値を表し、privateクラス要素(フィールド・メソッド・アクセサ)のキーとなります。各Private Nameは不変な[[Description]]内部スロットを持ち、値はStringです。Private NameはECMAScriptオブジェクトに
ClassStaticBlockDefinition Recordは、クラスのstatic初期化ブロック用実行コードをカプセル化する
ClassStaticBlockDefinition Recordは
フィールド名 | 値 | 意味 |
---|---|---|
[[BodyFunction]] |
ECMAScript |
クラスのstatic初期化時に呼び出される |