?
u
m
/
p
1-9
0
`
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%]
是一个存取器属性,其 set 访问器函数为
该函数
创建派生集合对象的方法应调用
Map 原型对象:
该方法被调用时执行以下步骤:
Map.prototype.constructor
的初始值是
该方法被调用时执行以下步骤:
值
该方法被调用时执行以下步骤:
该方法被调用时执行以下步骤:
callback 应为接受三个参数的函数。forEach
按键插入顺序对 Map 中每个键/值对调用一次 callback。仅对 Map 中实际存在的键调用;已删除的键不会调用。
如果提供 thisArg,它将在每次调用 callback 时用作
callback 以三个参数调用:条目的值、条目的键以及被遍历的 Map。
forEach
不直接修改其被调用的对象,但该对象可在 callback 内被修改。Map 的 [[MapData]] 中的每个条目只访问一次。调用开始后新增的键会被访问。一个键如果在访问后被删除然后在调用结束前又被重新加入会被再次访问。调用开始后删除且尚未访问的键不会被访问,除非它在调用结束前再次添加。
该方法被调用时执行以下步骤:
该方法被调用时执行以下步骤:
该方法被调用时执行以下步骤:
该方法被调用时执行以下步骤:
Map.prototype.size
是一个存取器属性,其 set 访问器函数为
该方法被调用时执行以下步骤:
该属性具有 { [[Writable]]:
Map Iterator 是一个表示对某个特定 Map 实例对象的特定迭代的对象。没有命名的 Map 迭代器
The abstract operation CreateMapIterator takes arguments map (an ECMAScript language value) and kind (
%MapIteratorPrototype% 对象:
该属性具有 { [[Writable]]:
Set 对象是
Set 对象必须使用哈希表或其他平均情况下提供次线性访问时间的机制实现。本规范使用的数据结构仅用于描述 Set 对象所需的可观察语义,不是可行的实现模型。
Set Record 是用于封装 Set 或类似对象接口的
Set 记录具有
字段名 | 取值 | 含义 |
---|---|---|
[[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 一个包含
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 行为的子类super
调用,以创建并初始化具有支持 Set.prototype
内置方法所需内部状态的子类实例。该函数被调用时执行以下步骤:
Set
Set.prototype
的初始值是
该属性具有 { [[Writable]]:
Set[%Symbol.species%]
是一个存取器属性,其 set 访问器函数为
该函数
创建派生集合对象的方法应调用
Set 原型对象:
该方法被调用时执行以下步骤:
该方法被调用时执行以下步骤:
Set.prototype.constructor
的初始值是
该方法被调用时执行以下步骤:
值
该方法被调用时执行以下步骤:
该方法被调用时执行以下步骤:
在迭代语义上,Set 类似于每个条目键和值相同的 Map。
该方法被调用时执行以下步骤:
callback 应为接受三个参数的函数。forEach
按值插入顺序对 Set 对象中每个值调用一次 callback。仅对实际存在的值调用;对已删除的值不会调用。
如果提供 thisArg,它作为每次调用 callback 的
callback 以三个参数调用:前两个参数是 Set 中的一个值(相同的值传两次),第三个参数是被遍历的 Set 对象。
callback 传递三个参数是为了与 Map 和 Array 的 forEach
回调函数保持一致;在 Set 中每个值同时被视为键和值。
forEach
不直接修改其被调用的对象,但对象可在 callback 中被修改。
每个值通常只访问一次;但如果某值在被访问后被删除并在调用结束前重新加入,会被再次访问。调用开始后删除且尚未访问的值不会被访问,除非在调用结束前再次添加。调用开始后新增的值会被访问。
该方法被调用时执行以下步骤:
该方法被调用时执行以下步骤:
该方法被调用时执行以下步骤:
该方法被调用时执行以下步骤:
该方法被调用时执行以下步骤:
在迭代语义上,Set 类似于每个条目键和值相同的 Map。
Set.prototype.size
是一个存取器属性,其 set 访问器函数为
该方法被调用时执行以下步骤:
该方法被调用时执行以下步骤:
该方法被调用时执行以下步骤:
该属性具有 { [[Writable]]:
Set Iterator 是一个
The abstract operation CreateSetIterator takes arguments set (an ECMAScript language value) and kind (
%SetIteratorPrototype% 对象:
该属性具有 { [[Writable]]:
WeakMap 是键/值对的集合,其中键是对象和/或符号,值可以是任意
实现可以在 WeakMap 的键/值对变得不可访问与其被移除之间施加任意决定的延迟。若该延迟对 ECMAScript 程序可观察,将导致不确定性并影响程序执行。因此,实现不得提供任何不需要观察者出示被观察键就能观察 WeakMap 键的方式。
WeakMap 必须使用哈希表或其他平均情况下提供次线性访问时间的机制实现。本规范使用的数据结构仅用于描述 WeakMap 所需的可观察语义,而非可行实现模型。
WeakMap 和 WeakSet 旨在提供一种动态地将状态与对象或符号关联的机制,在没有 WeakMap 或 WeakSet 实例的情况下,如果对象或符号本来会变得不可访问并被实现的垃圾回收机制回收,这种机制不会“泄漏”内存资源。该特性可以通过使用按对象/符号反向映射 WeakMap 或 WeakSet 实例到键来实现。或者,每个 WeakMap 或 WeakSet 实例可以在内部存储其键和值数据,但这种方法需要 WeakMap 或 WeakSet 实现与垃圾回收器协同。以下参考文献描述的机制可能对 WeakMap 和 WeakSet 的实现有用:
Barry Hayes. 1997. Ephemerons: a new finalization mechanism. 载于 Proceedings of the 12th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications (OOPSLA '97), A. Michael Berman (编). 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 中的一个值变得不可访问与其被移除之间施加任意决定的延迟。若该延迟对 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 (an ECMAScript language value) and returns an ECMAScript language value. It performs the following steps when called: