?uem/p1-90`この仕様内のアルゴリズムは値を操作し、それぞれの値には関連付けられた型があります。取り得る値の型は、この箇条で定義されているものだけです。型はさらに、
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 の実装を可能な限り単純かつ高性能に保つことでした。
この仕様では、「A、B、... の文字列連結」(各引数は String 値、コード単位、またはコード単位の列です)という語句は、各引数(順番どおり)のコード単位(順番どおり)を連結したコード単位列を持つ String 値を表します。
「string の inclusiveStart から exclusiveEnd までの部分文字列」(string は String 値またはコード単位の列であり、inclusiveStart と exclusiveEnd は
「ASCII 単語文字」という語句は、Unicode 基本ラテンブロック内のすべての英字と数字、および U+005F (LOW LINE) のみからなる、次の String 値を表します。
歴史的な理由により、これはさまざまなアルゴリズムにおいて重要な意味を持ちます。
searchValue が空の String であり、fromIndex ≤ string の長さである場合、このアルゴリズムは fromIndex を返します。空の String は、最後のコード単位の後を含め、文字列内のすべての位置で実質的に見つかります。
fromIndex + searchValue の長さ > string の長さである場合、このアルゴリズムは常に
searchValue が空の String である場合、このアルゴリズムは fromIndex を返します。空の String は、最後のコード単位の後を含め、文字列内のすべての位置で実質的に見つかります。
Symbol 型は、Object プロパティのキーとして使用できる、String ではないすべての値の集合です(
各 Symbol は一意かつ不変です。
各 Symbol は、値が String または
ウェルノウンシンボルは、この仕様のアルゴリズムによって明示的に参照される組込み Symbol 値です。これらは通常、仕様アルゴリズムの拡張ポイントとして機能する値を持つプロパティのキーとして使用されます。特に指定されていない限り、ウェルノウンシンボルの値はすべての
この仕様内では、ウェルノウンシンボルは標準の
%Symbol.name% が使用されます。具体的には、@@asyncIterator、@@hasInstance、@@isConcatSpreadable、@@| 仕様上の名前 | [[Description]] | 値と目的 |
|---|---|---|
| %Symbol.asyncDispose% |
|
オブジェクトに対するリソースのクリーンアップを非同期に実行するメソッドです。AsyncDisposableStack オブジェクト、およびそれを含むスコープの評価が完了したときの await using 宣言によって呼び出されます。
|
| %Symbol.asyncIterator% |
|
オブジェクトの既定の非同期イテレーターを返すメソッドです。for-await-of 文の意味論によって呼び出されます。
|
| %Symbol.dispose% |
|
オブジェクトに対する明示的なリソースのクリーンアップを実行するメソッドです。DisposableStack オブジェクト、AsyncDisposableStack オブジェクト、およびそれを含むスコープの評価が完了したときの using 宣言によって呼び出されます。
|
| %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% |
|
オブジェクトを対応するプリミティブ値に変換するメソッドです。 |
| %Symbol.toStringTag% |
|
オブジェクトの既定の文字列記述を作成する際に使用される String 値のプロパティです。組込みメソッド Object.prototype.toString |
| %Symbol.unscopables% |
|
自身および継承されたwith 環境束縛から除外される |
ECMAScript には、Number と BigInt という2つの組込み数値型があります。次の
一般に数値型は、精度の損失や切り捨てなしには相互変換できないため、ECMAScript 言語はこれらの型の間に暗黙の変換を提供しません。別の型を必要とする関数を呼び出すとき、プログラマーは型を変換するために Number および BigInt 関数を明示的に呼び出さなければなりません。
ECMAScript の初版およびそれ以降の版では、特定の演算子について、精度を失ったり切り捨てたりする可能性のある暗黙の数値変換が提供されてきました。これらの
Number 型は正確に 18,437,736,874,454,810,627 個(すなわち NaN によって生成されることに注意。)一部の実装では、外部コードがさまざまな NaN 値の違いを検出できる場合があるが、そのような動作は
ほかに、+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 が正確な実数の数学的量(π のような無理数である場合もある)を表す場合、それは次の方法で選択される
+∞ に対する
一部の ECMAScript 演算子は、
base が ** exponent の結果は、
有限精度の乗算は可換ですが、常に結合的であるとは限りません。
C および C++ では、剰余演算子は
% 演算子によって計算される浮動小数点剰余演算の結果は、% が Java の有限精度の加算は可換ですが、常に結合的であるとは限りません。
x - y は常に x + (-y) と同じ結果を生成します。
&、^ または |))、x (Number) および y (Number)。戻り値:
& である場合、^ である場合、| である。&, x, y) を返す。^, x, y) を返す。|, x, y) を返す。1.2e+3 のような科学的 E 表記を使用して表される。ECMAScript の実装者には、浮動小数点数の2進数から10進数への変換について David M. Gay が執筆した論文とコードが役立つ場合があります。
Gay, David M. Correctly Rounded Binary-Decimal and Decimal-Binary Conversions. Numerical Analysis, Manuscript 90-10. AT&T Bell Laboratories (Murray Hill, New Jersey). 30 November 1990. 入手先:
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 型は
&、^ または |))、x (BigInt) および y (BigInt)。戻り値:BigInt。 呼び出されると、次の手順を実行する。
& である場合、| である場合、&, x, y) を返す。^, x, y) を返す。|, x, y) を返す。Object 型の各インスタンスは、単に「Object」とも呼ばれ、プロパティの集合を表します。各プロパティは、データプロパティまたはアクセサープロパティのいずれかです。
オブジェクトのプロパティは、
整数インデックスは、
すべてのオブジェクトは論理的にはプロパティの集合ですが、プロパティへのアクセスおよび操作の意味論が異なる複数の形式のオブジェクトがあります。複数の形式のオブジェクトの定義については、
さらに、一部のオブジェクトは呼出し可能です。これらは関数または
属性は、
| 属性名 | その属性が存在するプロパティの種類 | 値の領域 | 既定値 | 説明 |
|---|---|---|---|---|
| [[Value]] |
|
|
|
プロパティへの get アクセスによって取得される値です。 |
| [[Writable]] |
|
Boolean |
|
|
| [[Getter]] |
|
|
|
値が |
| [[Setter]] |
|
|
|
値が |
| [[Enumerable]] |
|
Boolean |
|
|
| [[Configurable]] |
|
Boolean |
|
|
ECMAScript におけるオブジェクトの実際の意味論は、内部メソッドと呼ばれるアルゴリズムによって規定されます。ECMAScript エンジン内の各オブジェクトには、その実行時の動作を定義する内部メソッドの集合が関連付けられています。これらの内部メソッドは ECMAScript 言語の一部ではありません。これらは純粋に説明のため、この仕様によって定義されています。ただし、ECMAScript の実装内の各オブジェクトは、それに関連付けられた内部メソッドによって規定されるとおりに動作しなければなりません。これを実現する正確な方法は実装によって決定されます。
内部メソッド名は多態的です。これは、共通の内部メソッド名を異なるオブジェクト値に対して呼び出したとき、それぞれが異なるアルゴリズムを実行する場合があることを意味します。内部メソッドが呼び出される実際のオブジェクトが、その呼出しの「ターゲット」です。実行時に、アルゴリズムの実装が、オブジェクトがサポートしていない内部メソッドを使用しようとすると、
内部スロットは、オブジェクト、Symbol、または
すべてのオブジェクトは、
内部メソッドおよび内部スロットは、この仕様内では二重角括弧 [[ ]] で囲まれた名前によって識別されます。
通常オブジェクトは、次の基準をすべて満たすオブジェクトです。
特殊オブジェクトは、
この仕様では、
内部メソッドは、そのパラメーターに加えて、メソッド呼出しのターゲットであるオブジェクトにも常にアクセスできます。
内部メソッドは、呼出しパターンに示された戻り値型の値をラップする
| 内部メソッド | 説明 | 定義 |
|---|---|---|
| [[GetPrototypeOf]] ( ) | 内部メソッド [[GetPrototypeOf]]。引数なし。戻り値:( |
この仕様内では次の型に定義があります。 |
| [[SetPrototypeOf]] ( proto ) | 内部メソッド [[SetPrototypeOf]]。引数 proto ((Object または |
この仕様内では次の型に定義があります。 |
| [[IsExtensible]] ( ) | 内部メソッド [[IsExtensible]]。引数なし。戻り値:( |
この仕様内では次の型に定義があります。 |
| [[PreventExtensions]] ( ) | 内部メソッド [[PreventExtensions]]。引数なし。戻り値:( |
この仕様内では次の型に定義があります。 |
| [[GetOwnProperty]] ( propertyKey ) | 内部メソッド [[GetOwnProperty]]。引数 propertyKey ( |
この仕様内では次の型に定義があります。 |
| [[DefineOwnProperty]] ( propertyKey, propertyDesc ) | 内部メソッド [[DefineOwnProperty]]。引数 propertyKey ( |
この仕様内では次の型に定義があります。 |
| [[HasProperty]] ( propertyKey ) | 内部メソッド [[HasProperty]]。引数 propertyKey ( |
この仕様内では次の型に定義があります。 |
| [[Get]] ( propertyKey, receiver ) | 内部メソッド [[Get]]。引数 propertyKey ( |
この仕様内では次の型に定義があります。 |
| [[Set]] ( propertyKey, value, receiver ) | 内部メソッド [[Set]]。引数 propertyKey ( |
この仕様内では次の型に定義があります。 |
| [[Delete]] ( propertyKey ) | 内部メソッド [[Delete]]。引数 propertyKey ( |
この仕様内では次の型に定義があります。 |
| [[OwnPropertyKeys]] ( ) | 内部メソッド [[OwnPropertyKeys]]。引数なし。戻り値:( |
この仕様内では次の型に定義があります。 |
| 内部メソッド | 説明 | 定義 |
|---|---|---|
| [[Call]] ( thisArg, argList ) | 内部メソッド [[Call]]。引数 thisArg ( |
この仕様内では次の型に定義があります。 |
| [[Construct]] ( argList, newTarget ) | 内部メソッド [[Construct]]。引数 argList ( new 演算子または super 呼出しを介して呼び出されます。内部メソッドへの最初の引数は、super 呼出しの引数を要素とする new 演算子が最初に適用されたオブジェクトです。この内部メソッドを実装するオブジェクトを |
この仕様内では次の型に定義があります。 |
ECMAScript エンジンの Object の内部メソッドは、以下に規定する不変条件の一覧に適合しなければなりません。通常の ECMAScript Object と、この仕様のすべての標準
実装によって提供されるすべての
実装は、必須内部メソッドの機能を、その不変条件を強制せずに実装する代替インターフェースを提供するなど、いかなる方法によってもこれらの不変条件を回避できるようにしてはなりません。
任意の内部メソッドによって返される値は、次のいずれかを持つ
内部メソッドは、
3番目の不変条件の結果として、プロパティが
ウェルノウンイントリンシックは、この仕様のアルゴリズムによって明示的に参照され、通常は
この仕様内では、%name% のような参照は、その名前に対応する、現在の
| イントリンシック名 | グローバル名 | ECMAScript 言語との関連 |
|---|---|---|
|
|
|
AggregateError |
|
|
|
Array |
|
|
|
ArrayBuffer |
|
|
|
|
|
|
|
AsyncDisposableStack |
|
|
|
|
|
|
非同期 |
|
|
|
非同期ジェネレーター |
|
|
|
非同期ジェネレーターオブジェクトのプロトタイプ( |
|
|
|
すべての標準組込み非同期イテレーターオブジェクトが間接的に継承するオブジェクト | |
|
|
|
Atomics オブジェクト( |
|
|
|
BigInt |
|
|
|
BigInt64Array |
|
|
|
BigUint64Array |
|
|
|
Boolean |
|
|
|
DataView |
|
|
|
Date |
|
|
|
decodeURI 関数( |
|
|
|
decodeURIComponent 関数( |
|
|
|
DisposableStack |
|
|
|
encodeURI 関数( |
|
|
|
encodeURIComponent 関数( |
|
|
|
Error |
|
|
|
eval 関数( |
|
|
|
EvalError |
|
|
|
FinalizationRegistry |
|
|
|
Float16Array |
|
|
|
Float32Array |
|
|
|
Float64Array |
|
|
|
|
|
|
|
Function |
|
|
ジェネレーター |
|
|
|
ジェネレーターオブジェクトのプロトタイプ( |
|
|
|
|
Int8Array |
|
|
|
Int16Array |
|
|
|
Int32Array |
|
|
|
isFinite 関数( |
|
|
|
isNaN 関数( |
|
|
|
Iterator |
|
|
|
|
|
|
|
JSON オブジェクト( |
|
|
|
Map |
|
|
|
|
|
|
|
Math オブジェクト( |
|
|
|
Number |
|
|
|
Object |
|
|
|
parseFloat 関数( |
|
|
|
parseInt 関数( |
|
|
|
Promise |
|
|
|
Proxy |
|
|
|
RangeError |
|
|
|
ReferenceError |
|
|
|
Reflect オブジェクト( |
|
|
|
RegExp |
|
|
|
|
|
|
|
Set |
|
|
|
|
|
|
|
SharedArrayBuffer |
|
|
|
String |
|
|
|
|
|
|
|
SuppressedError |
|
|
|
Symbol |
|
|
|
SyntaxError |
|
|
|
|
|
|
すべての型付き Array |
|
|
|
|
TypeError |
|
|
|
Uint8Array |
|
|
|
Uint8ClampedArray |
|
|
|
Uint16Array |
|
|
|
Uint32Array |
|
|
|
URIError |
|
|
|
WeakMap |
|
|
|
WeakRef |
|
|
|
WeakSet |
|
|
Iterator.from によって返されるラップされたイテレーターオブジェクトのプロトタイプ( |
仕様型は、ECMAScript 言語構成要素および
Enum は、仕様内部の値であり、ECMAScript コードから直接観測することはできません。Enum は、
List 型は、new 式、関数呼出し、および単純な順序付き値リストが必要なその他のアルゴリズムにおける引数リスト(
アルゴリズムが順序を指定せずに List の要素を反復する場合、使用される順序は List 内の要素の順序です。
この仕様内での表記上の便宜のため、リテラル構文を使用して新しい List 値を表すことができます。たとえば、« 1, 2 » は、それぞれ特定の値で初期化された2つの要素を持つ List 値を定義します。新しい空の List は « » と表すことができます。
この仕様では、「A、B、... のリスト連結」(各引数は空であってもよい List)という語句は、各引数(順番どおり)の要素(順番どおり)を連結した要素を持つ新しい List 値を表します。
String の List に適用される場合、「辞書式コード単位順に従ってソートする」という語句は、短い方の文字列の長さまで各コード単位の数値によってソートし、それらがすべて等しい場合は、
Record 型は、この仕様のアルゴリズム内でデータの集約を記述するために使用されます。Record 型の値は、1つ以上の名前付きフィールドから構成されます。各フィールドの値は
この仕様内での表記上の便宜のため、オブジェクトリテラルに似た構文を使用して Record を表すことができます。たとえば、{ [[Field1]]: 42, [[Field2]]:
仕様の本文およびアルゴリズムでは、ドット表記を使用して Record の特定のフィールドを参照できます。たとえば、R が前の段落に示した Record である場合、R.[[Field2]] は「R の [[Field2]] という名前のフィールド」を表す短縮表記です。
よく使用される Record フィールドの組合せのスキーマには名前を付けることができ、その名前をリテラル Record の接頭辞として使用して、記述されている集約の具体的な種類を識別できます。たとえば、PropertyDescriptor { [[Value]]: 42, [[Writable]]:
Set 型は、
Relation 型は、Set に対する制約を説明するために使用されます。Relation 型の値は、その値域に含まれる値の順序対からなる Set です。たとえば、
厳密半順序は、以下を満たす Relation 値 R です。
R の定義域内のすべての a、b、および c について:
上記の2つの性質は、それぞれ非反射性および推移性と呼ばれます。
厳密全順序は、以下を満たす Relation 値 R です。
R の定義域内のすべての a、b、および c について:
上記の3つの性質は、それぞれ完全性、非反射性、および推移性と呼ばれます。
Completion Record 仕様型は、非局所的な制御移動を実行する文(break、continue、return、および throw)の動作など、値および制御フローの実行時の伝播を説明するために使用されます。
Completion Record は、
| フィールド名 | 値 | 意味 |
|---|---|---|
| [[Type]] |
|
発生した完了の種類です。 |
| [[Value]] |
|
生成された値です。 |
| [[Target]] |
String または |
指向性のある制御移動の対象ラベルです。 |
Completion Record を参照するために、次の短縮用語が使用されることがあります。
この仕様で定義される呼出し可能オブジェクトは、正常完了またはスロー完了のみを返します。それ以外の種類の Completion Record を返すことは編集上の誤りとみなされます。
Reference Record 型は、delete、typeof、代入演算子、super
Reference Record は、解決済みの名前または(まだ解決されていない可能性のある)プロパティ束縛です。そのフィールドは
| フィールド名 | 値 | 意味 |
|---|---|---|
| [[Base]] | 束縛を保持する値または |
|
| [[ReferencedName]] | 束縛の名前です。[[Base]] 値が |
|
| [[Strict]] | Boolean | |
| [[ThisValue]] | super |
この仕様では、Reference Record を操作するために次の
Property Descriptor 型は、Object プロパティ属性の操作および実体化を説明するために使用されます。Property Descriptor は0個以上のフィールドを持つ
Property Descriptor 値は、特定のフィールドの存在または使用に基づいて、データ Property Descriptor とアクセサー Property Descriptor にさらに分類できます。データ Property Descriptor は、[[Value]] または [[Writable]] という名前のフィールドのいずれかを含むものです。アクセサー Property Descriptor は、[[Getter]] または [[Setter]] という名前のフィールドのいずれかを含むものです。任意の Property Descriptor は [[Enumerable]] および [[Configurable]] という名前のフィールドを持つことができます。Property Descriptor 値が、データ Property Descriptor とアクセサー Property Descriptor の両方になることはできません。ただし、どちらでもない場合があります(この場合は汎用 Property Descriptor です)。完全に設定された Property Descriptorとは、アクセサー Property Descriptor またはデータ Property Descriptor のいずれかであり、
この仕様では、Property Descriptor 値を操作するために次の
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 の意味論は、
この仕様では、Data Block 値を操作するために次の
PrivateElement 型は、private クラスフィールド、メソッド、およびアクセサーの仕様で使用される
PrivateElement 型の値は、
| フィールド名 | そのフィールドが存在する [[Kind]] フィールドの値 | 値 | 意味 |
|---|---|---|---|
| [[Key]] | すべて |
|
フィールド、メソッド、またはアクセサーの名前です。 |
| [[Kind]] | すべて |
|
要素の種類です。 |
| [[Value]] |
|
|
フィールドの値です。 |
| [[Getter]] |
|
|
プライベートアクセサーの getter です。 |
| [[Setter]] |
|
|
プライベートアクセサーの setter です。 |
ClassFieldDefinition 型は、クラスフィールドの仕様で使用される
ClassFieldDefinition 型の値は、
| フィールド名 | 値 | 意味 |
|---|---|---|
| [[Name]] |
|
フィールドの名前です。 |
| [[Initializer]] |
ECMAScript |
存在する場合、フィールドの初期化子です。 |
Private Name 仕様型は、プライベートクラス要素(フィールド、メソッド、またはアクセサー)のキーを表す、グローバルに一意な値(その他の点では区別できない場合でも、他のどの Private Name とも異なる値)を記述するために使用されます。各 Private Name は、String である不変の [[Description]] 内部スロットを持ちます。Private Name は、
ClassStaticBlockDefinition Record は、クラスの静的初期化ブロックの実行可能コードをカプセル化するために使用される
ClassStaticBlockDefinition Record は、
| フィールド名 | 値 | 意味 |
|---|---|---|
| [[BodyFunction]] |
ECMAScript |
クラスの静的初期化中に呼び出される |