3
正如标题所示,是否可以安全地迭代新的Set & Map类型并在迭代过程中删除条目?例如,在Java中,这会导致ConcurrentModificationExceptions异常。ECMAScript 6 Map&Set - 在迭代过程中安全删除?
我无法在规范中找到有关此问题的任何信息。所以我想这是允许的?
正如标题所示,是否可以安全地迭代新的Set & Map类型并在迭代过程中删除条目?例如,在Java中,这会导致ConcurrentModificationExceptions异常。ECMAScript 6 Map&Set - 在迭代过程中安全删除?
我无法在规范中找到有关此问题的任何信息。所以我想这是允许的?
引用MapIterator object's next()
section,
让条目是是m的[[属于MapData]]内部槽的值列表。
重复while 索引小于条目元素的总数。 每次评估此方法时都必须重新确定元素的数量。
... ...
- 将[[图]] O的内部槽,以未定义。
- 返回CreateIterResultObject(不确定,真正)。
类似地从SetIterator object's next()
section,
- 让条目是是S的[[SetData的]]内部槽的值的列表。
- 重复,而索引小于条目元素的总数。 每次评估此方法时都必须重新确定元素的数量。
... ...
- 的O的[[IteratedSet]]内部狭槽设置为未定义。
- 返回CreateIterResultObject(不确定,真正)。
由于值重新评估每次next()
被调用时,如果当前指针(指数)比条目的长度大,那么它不引发错误,而是返回undefined
。
但是,一般来说,避免在迭代相同的容器时修改容器。
请注意,*条目数量*不会减少。他们只是被设置为“空”。所以它基本上只是说新元素必须迭代。 – Bergi