【发布时间】:2015-11-30 11:46:02
【问题描述】:
正如标题所示,迭代新的 Set & Map 类型并在迭代期间删除条目是否安全?
例如,在 Java 中,这会导致 ConcurrentModificationExceptions。
我无法在规范中找到有关此问题的任何信息。所以我想这是允许的??
【问题讨论】:
标签: javascript dictionary set iteration ecmascript-6
正如标题所示,迭代新的 Set & Map 类型并在迭代期间删除条目是否安全?
例如,在 Java 中,这会导致 ConcurrentModificationExceptions。
我无法在规范中找到有关此问题的任何信息。所以我想这是允许的??
【问题讨论】:
标签: javascript dictionary set iteration ecmascript-6
引用MapIterator object's next() section,
令 entries 为列表,它是 m 的 [[MapData]] 内部槽的值。
当 index 小于条目的元素总数时重复。 每次评估此方法时都必须重新确定元素的数量。
... ...
- 将O的[[Map]]内部槽设置为undefined。
- 返回 CreateIterResultObject(undefined, true)。
同样来自SetIterator object's next() section,
- 令 entries 为列表,它是 s 的 [[SetData]] 内部槽的值。
- 当 index 小于条目的元素总数时重复。 每次评估此方法时都必须重新确定元素的数量。
... ...
- 将O的[[IteratedSet]]内部槽设置为undefined。
- 返回 CreateIterResultObject(undefined, true)。
由于每次调用 next() 时都会重新计算值,因此如果当前指针 (index) 大于条目的长度,则不会抛出错误,而是返回undefined。
但是,一般来说,避免在迭代容器时修改容器。
【讨论】:
empty。所以它基本上只是说新元素确实必须得到迭代。