?uem/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 会以两个实参调用:元素的值和元素的索引。
groupBy 的返回值是一个 Map。
此函数在被调用时执行以下步骤:
Map.prototype 的初始值是
此属性具有特性 { [[Writable]]:
Map[%Symbol.species%] 是
此函数的
创建派生集合对象的方法应调用
Map 原型对象:
此方法在被调用时执行以下步骤:
现有的 [[MapData]] List 会被保留,因为可能存在已经在遍历该 List 的中途暂停的
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 对象没有具名构造器。相反,Map Iterator 对象通过调用 Map 实例对象的某些方法创建。
The abstract operation CreateMapIterator takes arguments map (an ECMAScript language value) and kind (
%MapIteratorPrototype% 对象:
此属性具有特性 { [[Writable]]:
Set 对象是
Set 对象必须使用哈希表或其他机制来实现,这些机制平均而言提供的访问时间相对于集合中元素数量是次线性的。本规范中使用的数据结构仅用于描述 Set 对象所要求的可观察语义。它并不旨在作为可行的实现模型。
Set Record 是用于封装 Set 或类似对象的接口的 Record。
Set Record 具有
| 字段名 | 值 | 含义 |
|---|---|---|
| [[SetObject]] | an Object | Set 或类似对象。 |
| [[Size]] |
a non-negative |
对象报告的大小。 |
| [[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 normal completion containing a
The abstract operation SetDataHas takes arguments setData (a List of either
The abstract operation SetDataIndex takes arguments setData (a List of either
The abstract operation SetDataSize takes argument setData (a List of either
Set 构造器:
extends 子句中的值。打算继承指定 Set 行为的子类super 调用,以创建并初始化子类实例,使其具备支持 Set.prototype 的内置方法所必需的内部状态。此函数在被调用时执行以下步骤:
Set 构造器:
Set.prototype 的初始值是
此属性具有特性 { [[Writable]]:
Set[%Symbol.species%] 是
此函数的
创建派生集合对象的方法应调用
Set 原型对象:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
现有的 [[SetData]] List 会被保留,因为可能存在已经在遍历该 List 的中途暂停的
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 (an ECMAScript language value) and kind (
%SetIteratorPrototype% 对象:
此属性具有特性 { [[Writable]]:
WeakMap 是键/值对的集合,其中键是对象和/或 symbol,值可以是任意
实现可以在 WeakMap 的某个键/值对变得不可访问的时间与该键/值对从 WeakMap 中移除的时间之间施加任意确定的延迟。如果这种延迟对 ECMAScript 程序可观察,它将成为可能影响程序执行的不确定性来源。因此,ECMAScript 实现不得提供任何手段来观察 WeakMap 的某个键,除非观察者需要提供被观察的键。
WeakMap 必须使用哈希表或其他机制来实现,这些机制平均而言提供的访问时间相对于集合中键/值对数量是次线性的。本规范中使用的数据结构仅用于描述 WeakMap 所要求的可观察语义。它并不旨在作为可行的实现模型。
WeakMap 和 WeakSet 旨在提供一种机制,用于以不会“泄漏”内存资源的方式,将状态动态关联到对象或 symbol;也就是说,如果没有 WeakMap 或 WeakSet 实例,该对象或 symbol 原本会变得不可访问,并受到实现的垃圾回收机制进行资源回收。可以通过使用 WeakMap 或 WeakSet 实例到键的反向每对象/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 行为的子类super 调用,以创建并初始化子类实例,使其具备支持 WeakMap.prototype 的内置方法所必需的内部状态。此函数在被调用时执行以下步骤:
如果存在参数 iterable,则它预期为实现了
WeakMap 构造器:
WeakMap.prototype 的初始值是
此属性具有特性 { [[Writable]]:
WeakMap 原型对象:
WeakMap.prototype.constructor 的初始值是
此方法在被调用时执行以下步骤:
值
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此方法在被调用时执行以下步骤:
此属性具有特性 { [[Writable]]:
WeakMap 实例是
WeakSet 是对象和/或 symbol 的集合。一个不同的对象或 symbol 在 WeakSet 的集合中只能作为元素出现一次。可以查询 WeakSet,以查看它是否
实现可以在 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 (an ECMAScript language value) and returns an ECMAScript language value. It performs the following steps when called: