2015-09-04 80 views
3

正如标题所示,是否可以安全地迭代新的Set & Map类型并在迭代过程中删除条目?例如,在Java中,这会导致ConcurrentModificationExceptions异常。ECMAScript 6 Map&Set - 在迭代过程中安全删除?

我无法在规范中找到有关此问题的任何信息。所以我想这是允许的?

回答

2

引用MapIterator object's next() section

  • 条目是是m的[[属于MapData]]内部槽的值列表。

  • 重复while 索引小于条目元素的总数。 每次评估此方法时都必须重新确定元素的数量。

  • ... ...

  • 将[[图]] O的内部槽,以未定义
  • 返回CreateIterResultObject(不确定真正
  • 类似地从SetIterator object's next() section

  • 条目是是S的[[SetData的]]内部槽的值的列表。
  • 重复,而索引小于条目元素的总数。 每次评估此方法时都必须重新确定元素的数量。
  • ... ...

  • 的O的[[IteratedSet]]内部狭槽设置为未定义
  • 返回CreateIterResultObject(不确定真正
  • 由于值重新评估每次next()被调用时,如果当前指针(指数)比条目的长度大,那么它不引发错误,而是返回undefined


    但是,一般来说,避免在迭代相同的容器时修改容器。

    +0

    请注意,*条目数量*不会减少。他们只是被设置为“空”。所以它基本上只是说新元素必须迭代。 – Bergi