?um/p1-90`Map 是键/值对的集合,其中键和值都可以是任意
Map 必须使用哈希表或其他机制来实现,这些机制平均而言能提供相对于集合中元素数量为次线性的访问时间。本规范中使用的数据结构仅用于描述 Map 所要求的可观察语义。它并不意图作为可行的实现模型。
Map
extends 子句的值。意图继承指定 Map 行为的子类super 调用,以创建并初始化带有支持 Map.prototype 内置方法所需内部状态的子类实例。此函数在被调用时执行以下步骤:
如果存在参数 iterable,则期望它是一个实现了
The abstract operation AddEntriesFromIterable takes arguments target (an Object), iterable (an ECMAScript language value, but not
期望参数 iterable 是一个实现了
Map
callback 应是一个接受两个参数的函数。groupBy 按升序对 items 中的每个元素调用一次 callback,并构造一个新的 Map。callback 返回的每个值都用作 Map 中的键。对于每个这样的键,结果 Map 都有一个条目,其键为该键,其值为一个数组,包含所有使 callback 返回该键的元素。
调用 callback 时传入两个参数:元素的值和元素的索引。
groupBy 的返回值是一个 Map。
此函数在被调用时执行以下步骤:
Map.prototype 的初始值是
此属性具有特性 { [[Writable]]:
Map[%Symbol.species%] 是一个
此函数的
创建派生集合对象的方法应调用
Map 原型对象:
此方法在被调用时执行以下步骤:
保留现有的 [[MapData]]
Map.prototype.constructor 的初始值是
此方法在被调用时执行以下步骤:
值
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
callback 应是一个接受三个参数的函数。forEach 按键插入顺序对 Map 中存在的每个键/值对调用一次 callback。callback 只会针对 Map 中实际存在的键调用;不会针对已从 Map 中删除的键调用。
如果提供了 thisArg 参数,则它将用作每次调用 callback 时的
调用 callback 时传入三个参数:项的值、项的键以及正在遍历的 Map。
forEach 不会直接改变调用它的对象,但该对象可能会被对 callback 的调用改变。map 的 [[MapData]] 中的每个条目只会被访问一次。在 forEach 调用开始后添加的新键会被访问。某个键如果在被访问后被删除,然后在 forEach 调用完成前重新添加,则会被再次访问。在 forEach 调用开始后且被访问之前被删除的键不会被访问,除非该键在 forEach 调用完成前再次被添加。
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
Map.prototype.size 是一个
此方法在被调用时执行以下步骤:
此属性具有特性 { [[Writable]]:
Map Iterator 是一个对象,表示对某个特定 Map 实例对象进行的特定迭代。Map Iterator 对象没有具名
The abstract operation CreateMapIterator takes arguments map (一个
%MapIteratorPrototype% 对象:
此属性具有特性 { [[Writable]]:
Set 对象是
Set 对象必须使用哈希表或其他机制来实现,这些机制平均而言能提供相对于集合中元素数量为次线性的访问时间。本规范中使用的数据结构仅用于描述 Set 对象所要求的可观察语义。它并不意图作为可行的实现模型。
Set Record 是一个
Set Record 具有
| 字段名 | 值 | 含义 |
|---|---|---|
| [[SetObject]] | 一个 Object | 该 Set 或类似对象。 |
| [[Size]] |
一个非负 |
该对象报告的大小。 |
| [[Has]] |
一个 |
该对象的 has 方法。
|
| [[Keys]] |
一个 |
该对象的 keys 方法。
|
The abstract operation GetSetRecord takes argument obj (一个
The abstract operation SetDataHas takes arguments setData (一个由
The abstract operation SetDataIndex takes arguments setData (一个由
The abstract operation SetDataSize takes argument setData (一个由
Set
extends 子句的值。意图继承指定 Set 行为的子类super 调用,以创建并初始化带有支持 Set.prototype 内置方法所需内部状态的子类实例。此函数在被调用时执行以下步骤:
Set
Set.prototype 的初始值是
此属性具有特性 { [[Writable]]:
Set[%Symbol.species%] 是一个
此函数的
创建派生集合对象的方法应调用
Set 原型对象:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
保留现有的 [[SetData]]
Set.prototype.constructor 的初始值是
此方法在被调用时执行以下步骤:
值
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
为迭代目的,Set 看起来类似于一个 Map,其中每个条目的键和值具有相同的值。
此方法在被调用时执行以下步骤:
callback 应是一个接受三个参数的函数。forEach 按值插入顺序对
如果提供了 thisArg 参数,则它将用作每次调用 callback 时的
调用 callback 时传入三个参数:前两个参数是 Set 中包含的一个值。两个参数传入相同的值。正在遍历的
callback 以三个参数调用,是为了与 Map 和 Array 的 forEach 方法所使用的回调函数保持一致。对于 Set,每个项值都被视为键和值。
forEach 不会直接改变调用它的对象,但该对象可能会被对 callback 的调用改变。
通常每个值只会被访问一次。然而,如果某个值在被访问后被删除,然后在 forEach 调用完成前重新添加,则该值会被再次访问。在 forEach 调用开始后且被访问之前被删除的值不会被访问,除非该值在 forEach 调用完成前再次被添加。在 forEach 调用开始后添加的新值会被访问。
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
为迭代目的,Set 看起来类似于一个 Map,其中每个条目的键和值具有相同的值。
Set.prototype.size 是一个
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此属性具有特性 { [[Writable]]:
Set Iterator 是一个
The abstract operation CreateSetIterator takes arguments set (一个
%SetIteratorPrototype% 对象:
此属性具有特性 { [[Writable]]:
WeakMap 是键/值对的集合,其中键是对象和/或符号,值可以是任意
实现可以在 WeakMap 的某个键/值对变得不可访问的时间与该键/值对从 WeakMap 中移除的时间之间施加任意确定的延迟。如果此延迟可被 ECMAScript 程序观察到,它将成为一种可能影响程序执行的不确定性来源。因此,ECMAScript 实现不得提供任何手段来观察 WeakMap 的某个键,除非该观察要求观察者提供被观察的键。
WeakMap 必须使用哈希表或其他机制来实现,这些机制平均而言能提供相对于集合中键/值对数量为次线性的访问时间。本规范中使用的数据结构仅用于描述 WeakMap 所要求的可观察语义。它并不意图作为可行的实现模型。
WeakMap 和 WeakSet 意图提供一种机制,用于以不会“泄漏”内存资源的方式动态地将状态与对象或符号关联起来;也就是说,如果没有 WeakMap 或 WeakSet 实例,该对象或符号本来会变得不可访问并受实现的垃圾收集机制回收。此特性可以通过使用 WeakMap 或 WeakSet 实例到键的反向每对象/符号映射来实现。或者,每个 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 行为的子类super 调用,以创建并初始化带有支持 WeakMap.prototype 内置方法所需内部状态的子类实例。此函数在被调用时执行以下步骤:
如果存在参数 iterable,则期望它是一个实现了
WeakMap
WeakMap.prototype 的初始值是
此属性具有特性 { [[Writable]]:
WeakMap 原型对象:
WeakMap.prototype.constructor 的初始值是
此方法在被调用时执行以下步骤:
值
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此属性具有特性 { [[Writable]]:
WeakMap 实例是
WeakSet 是对象和/或符号的集合。一个不同的对象或符号作为 WeakSet 集合的元素只能出现一次。可以查询 WeakSet 以查看它是否包含某个特定值,但不提供枚举它所持有的值的机制。在某些条件下,不再存
实现可以在 WeakSet 中包含的某个值变得不可访问的时间与该值从 WeakSet 中移除的时间之间施加任意确定的延迟。如果此延迟可被 ECMAScript 程序观察到,它将成为一种可能影响程序执行的不确定性来源。因此,ECMAScript 实现不得提供任何手段来确定 WeakSet 是否包含某个特定值,除非该确定要求观察者提供被观察的值。
WeakSet 必须使用哈希表或其他机制来实现,这些机制平均而言能提供相对于集合中元素数量为次线性的访问时间。本规范中使用的数据结构仅用于描述 WeakSet 所要求的可观察语义。它并不意图作为可行的实现模型。
见
WeakSet
extends 子句的值。意图继承指定 WeakSet 行为的子类super 调用,以创建并初始化带有支持 WeakSet.prototype 内置方法所需内部状态的子类实例。此函数在被调用时执行以下步骤:
WeakSet
WeakSet.prototype 的初始值是
此属性具有特性 { [[Writable]]:
WeakSet 原型对象:
此方法在被调用时执行以下步骤:
WeakSet.prototype.constructor 的初始值是
此方法在被调用时执行以下步骤:
值
此方法在被调用时执行以下步骤:
此属性具有特性 { [[Writable]]:
WeakSet 实例是
The abstract operation CanonicalizeKeyedCollectionKey takes argument key (一个