?uem/p1-90`Map 是键/值对的集合,其中键和值都可以是任意
Map 必须使用哈希表或其他机制实现,这些机制提供的平均访问时间相对于集合中的元素数量是次线性的。本规范中使用的数据结构仅用于描述 Map 所要求的可观察语义。它并不旨在作为可行的实现模型。
Map
extends 子句中的值。希望继承指定 Map 行为的子类super 调用,以创建并初始化具有支持 Map.prototype 内置方法所必需内部状态的子类实例。调用时,此函数执行以下步骤:
如果存在参数 iterable,则预期它是一个实现了
参数 iterable 预期是一个实现了
Map
callback 应当是一个接受两个参数的函数。groupBy 按升序对 items 中的每个元素调用一次 callback,并构造一个新的 Map。callback 返回的每个值都用作 Map 中的键。对于每个这样的键,结果 Map 都有一个条目,其键是该键,其值是一个
调用 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 对象没有具名
%MapIteratorPrototype% 对象:
此属性具有特性 { [[Writable]]:
Set 对象是
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 方法。
|
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 是具有下述结构的
%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 必须使用哈希表或其他机制实现,这些机制提供的平均访问时间相对于集合中的元素数量是次线性的。本规范中使用的数据结构仅用于描述 WeakSet 所要求的可观察语义。它并不旨在作为可行的实现模型。
WeakSet
extends 子句中的值。希望继承指定 WeakSet 行为的子类super 调用,以创建并初始化具有支持 WeakSet.prototype 内置方法所必需内部状态的子类实例。调用时,此函数执行以下步骤:
WeakSet
WeakSet.prototype 的初始值是
此属性具有特性 { [[Writable]]:
WeakSet 原型对象:
调用时,此方法执行以下步骤:
WeakSet.prototype.constructor 的初始值是
调用时,此方法执行以下步骤:
值
调用时,此方法执行以下步骤:
此属性具有特性 { [[Writable]]:
WeakSet 实例是从