?
u
m
/
p
1-9
0
`
Map はキー/値ペアのコレクションであり、キーと値の両方に任意の ECMAScript 言語値を使用できる。Map のコレクション内では、同一のキー値はただ 1 つのキー/値ペアにしか現れない。異なるキー値の判別には
Map はハッシュテーブルまたはコレクション内要素数に対して平均で亜線形のアクセス時間を提供する他の機構を用いて実装されなければならない。本仕様で用いるデータ構造は Map の必要な観測可能セマンティクスを記述するためだけのものであり、実際に成立する実装モデルであることを意図しない。
Map
extends
句の値として使用できる。指定された Map の挙動を継承することを意図するサブクラスMap.prototype
組込みメソッドをサポートするために必要な内部状態でサブクラスインスタンスを生成・初期化するため、Map super
呼び出しを含めなければならない。この関数は呼び出し時に次を行う:
引数 iterable が与えられる場合、それは
The abstract operation AddEntriesFromIterable takes arguments target (an Object), iterable (an ECMAScript language value, but not
引数 iterable は
Map
callback は 2 つの引数を受け取る関数であるべき。groupBy
は items の各要素に対し昇順で callback を 1 度ずつ呼び、新しい Map を構築する。callback が返した各値は Map のキーとして用いられる。そのキーごとに、結果 Map はそのキーをキーとし、callback がそのキーを返した全要素を含む配列を値とするエントリを持つ。
callback は 2 つの引数 (要素の値、要素のインデックス) で呼ばれる。
groupBy
の戻り値は Map である。
この関数は呼び出し時に次を行う:
Map.prototype
の初期値は
このプロパティは { [[Writable]]:
Map[%Symbol.species%]
は set アクセサが
この関数の
派生コレクションオブジェクトを生成するメソッドは
Map プロトタイプオブジェクト:
このメソッドは呼び出し時に次を行う:
既存の [[MapData]]
Map.prototype.constructor
の初期値は
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
callback は 3 引数を受け取る関数であるべき。forEach
は Map に存在する各キー/値ペアについてキー挿入順に 1 度ずつ callback を呼ぶ。削除済みキーについては呼ばれない。
thisArg が与えられれば各呼出しの
callback は (値, キー, 走査対象 Map) で呼ばれる。
forEach
自体は直接オブジェクトをミューテートしないが callback により変更され得る。Map の [[MapData]] の各エントリは 1 度だけ訪問される。forEach
開始後に追加された新しいキーは訪問される。訪問後に削除され再追加されたキーは再訪問され得る。開始後に削除され訪問前のキーは再追加されない限り訪問されない。
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
Map.prototype.size
は set アクセサが
このメソッドは呼び出し時に次を行う:
このプロパティは { [[Writable]]:
Map インスタンスは通常のオブジェクトであり、
Map Iterator は特定の Map インスタンスオブジェクト上の特定の反復を表すオブジェクトである。Map Iterator オブジェクトには名前付き
The abstract operation CreateMapIterator takes arguments map (an ECMAScript language value) and kind (
%MapIteratorPrototype% オブジェクト:
このプロパティは { [[Writable]]:
Set オブジェクトは ECMAScript 言語値のコレクションである。異なる値は Set のコレクション内で 1 度だけ要素として現れる。異なる値の判別には
Set オブジェクトはハッシュテーブルまたはコレクション内要素数に対し平均で亜線形アクセス時間を提供する他の機構を用いて実装されなければならない。本仕様で用いるデータ構造は Set オブジェクトの必要な観測可能セマンティクスを記述するためのみのものであり、実装モデルとなることを意図しない。
Set Record は Set または類似オブジェクトのインターフェースをカプセル化するために用いられる
Set Record は
フィールド名 | 値 | 意味 |
---|---|---|
[[SetObject]] | an Object | Set または類似オブジェクト。 |
[[Size]] | a non-negative integer or +∞ | オブジェクトの報告サイズ。 |
[[Has]] | a function object |
オブジェクトの has メソッド。
|
[[Keys]] | a function object |
オブジェクトの keys メソッド。
|
The abstract operation GetSetRecord takes argument obj (an ECMAScript language value) and returns either a
The abstract operation SetDataHas takes arguments setData (a
The abstract operation SetDataIndex takes arguments setData (a
The abstract operation SetDataSize takes argument setData (a
Set
extends
句の値として使用できる。指定された Set の挙動を継承するサブクラスSet.prototype
組込みメソッドをサポートするための内部状態でサブクラスインスタンスを生成・初期化するため、Set super
呼び出しを含めなければならない。この関数は呼び出し時に次を行う:
Set
Set.prototype
の初期値は
このプロパティは { [[Writable]]:
Set[%Symbol.species%]
は set アクセサが
この関数の
派生コレクションオブジェクトを生成するメソッドは
Set プロトタイプオブジェクト:
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
既存の [[SetData]]
Set.prototype.constructor
の初期値は
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
反復目的では、Set は各エントリのキーと値が同一である Map に似て見える。
このメソッドは呼び出し時に次を行う:
callback は 3 引数を受け取る関数であるべき。forEach
は Set オブジェクト内の各値に対して値挿入順で callback を 1 度呼ぶ。削除済みの値については呼ばれない。
thisArg が与えられれば各呼出しの
callback は 3 引数で呼ばれる: 最初の 2 引数は Set に含まれる値で同一の値、3 番目は走査対象の Set。
callback が 3 引数で呼ばれるのは Map や Array の forEach
のコールバックと整合性を保つため。Set では各項目値がキーと値の双方であるとみなされる。
forEach
自体は直接オブジェクトを変更しないが、callback により変更され得る。
各値は通常 1 度だけ訪問されるが、訪問後削除され完了前に再追加された場合は再訪問される。開始後に削除され訪問前であった値は完了前に再追加されない限り訪問されない。開始後に追加された新しい値は訪問される。
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
反復目的では、Set は各エントリのキーと値が同一の Map のように見える。
Set.prototype.size
は set アクセサが
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
このプロパティは { [[Writable]]:
Set インスタンスは通常のオブジェクトであり、
Set Iterator は以下で定義される構造を持つ通常のオブジェクトであり、特定の Set インスタンスオブジェクト上の特定の反復を表す。Set Iterator オブジェクトには名前付き
The abstract operation CreateSetIterator takes arguments set (an ECMAScript language value) and kind (
%SetIteratorPrototype% オブジェクト:
このプロパティは { [[Writable]]:
WeakMap はキーがオブジェクトおよび/またはシンボルであり、値が任意の ECMAScript 言語値であるキー/値ペアのコレクションである。WeakMap は特定のキーを持つキー/値ペアを含むかを問い合わせできるが、保持する値をキーとして列挙する仕組みは提供されない。特定の状況では、
実装は、WeakMap のキー/値ペアが到達不能になってから WeakMap から除去されるまでの間に任意に決定される遅延を課すことができる。もしこの遅延が ECMAScript プログラムから観測可能であれば、プログラム実行に影響する不確定性の原因となり得る。そのため ECMAScript 実装は、観測者が観測対象のキーを提示することなく WeakMap のキーを観測する手段を提供してはならない。
WeakMap はハッシュテーブルまたはコレクション内キー/値ペア数に対し平均で亜線形のアクセス時間を提供する他の機構を用いて実装されなければならない。本仕様で用いられるデータ構造は WeakMap の必要な観測可能セマンティクスを記述するためだけのもので、実装モデルとなることを意図しない。
WeakMap と WeakSet は、WeakMap や WeakSet インスタンスが存在しなかった場合にそのオブジェクトまたはシンボルが到達不能となり実装のガーベジコレクション機構によるリソース回収対象となる状況で、メモリ資源を “リーク” しない形で動的に状態を関連付ける機構を提供することを意図している。この特性は WeakMap または WeakSet インスタンスからキーへの逆方向 per-object/symbol マッピングを用いることで達成できる。あるいは各 WeakMap または WeakSet インスタンスが内部にキーと値データを保持してもよいが、この方法は WeakMap/WeakSet 実装とガーベジコレクタ間の協調を要する。以下の参考文献は WeakMap および WeakSet の実装に有用となり得る機構を記述している:
Barry Hayes. 1997. Ephemerons: a new finalization mechanism. In Proceedings of the 12th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (OOPSLA '97), A. Michael Berman (Ed.). ACM, New York, NY, USA, 176-183, http://doi.acm.org/10.1145/263698.263733.
Alexandra Barros, Roberto Ierusalimschy, Eliminating Cycles in Weak Tables. Journal of Universal Computer Science - J.UCS, vol. 14, no. 21, pp. 3481-3497, 2008, http://www.jucs.org/jucs_14_21/eliminating_cycles_in_weak
WeakMap
extends
句の値として使用できる。指定された WeakMap の挙動を継承するサブクラスWeakMap.prototype
組込みメソッドをサポートするために必要な内部状態でサブクラスインスタンスを生成・初期化するため、WeakMap super
呼び出しを含めなければならない。この関数は呼び出し時に次を行う:
引数 iterable が与えられる場合、それは
WeakMap
WeakMap.prototype
の初期値は
このプロパティは { [[Writable]]:
WeakMap プロトタイプオブジェクト:
WeakMap.prototype.constructor
の初期値は
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時:
このメソッドは呼び出し時:
このプロパティは { [[Writable]]:
WeakMap インスタンスは通常のオブジェクトであり、
WeakSet はオブジェクトおよび/またはシンボルのコレクションである。区別されるオブジェクトまたはシンボルは WeakSet のコレクション内で 1 度だけ要素として現れる。WeakSet は特定の値を含むかを問い合わせできるが、保持する値を列挙する仕組みは提供されない。特定の状況では、
実装は WeakSet に含まれる値が到達不能になってから WeakSet から除去されるまでの間に任意の遅延を課すことができる。もしこの遅延が ECMAScript プログラムから観測可能であれば、不確定性の原因となり得る。そのため ECMAScript 実装は、観測者が観測対象値を提示することなく WeakSet が特定値を含むか決定する手段を提供してはならない。
WeakSet はハッシュテーブルまたはコレクション内要素数に対し平均で亜線形アクセス時間を提供する他の機構を用いて実装されなければならない。本仕様のデータ構造は WeakSet の必要な観測可能セマンティクスを記述するためだけのもので、実装モデルとなることを意図しない。
WeakSet
extends
句の値として使用できる。指定された WeakSet の挙動を継承するサブクラスWeakSet.prototype
組込みメソッドをサポートするために必要な内部状態でサブクラスインスタンスを生成・初期化するため、WeakSet super
呼び出しを含めなければならない。この関数は呼び出し時に次を行う:
WeakSet
WeakSet.prototype
の初期値は
このプロパティは { [[Writable]]:
WeakSet プロトタイプオブジェクト:
このメソッドは呼び出し時に次を行う:
WeakSet.prototype.constructor
の初期値は
このメソッドは呼び出し時に次を行う:
このメソッドは呼び出し時に次を行う:
このプロパティは { [[Writable]]:
WeakSet インスタンスは通常のオブジェクトであり、
The abstract operation CanonicalizeKeyedCollectionKey takes argument key (an ECMAScript language value) and returns an ECMAScript language value. It performs the following steps when called: