ECMAScript 6 Map&设置 - 在迭代期间安全删除?

时间:2015-09-04 10:37:24

标签: javascript dictionary set iteration ecmascript-6

正如标题所暗示的那样,迭代新的Set& amp;在迭代期间映射类型并删除条目?

例如,在Java中,这会导致ConcurrentModificationExceptions。

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

1 个答案:

答案 0 :(得分:2)

引用MapIterator object's next() section

  
      
  1. 条目成为列表,它是m的[[MapData]]内部广告位的值。

  2.   
  3. 重复,而 index 小于条目元素的总数。 每次评估此方法时,必须重新确定元素数量。

  4.   

... ...

  
      
  1. 将O的[[Map]]内部插槽设置为 undefined
  2.   
  3. 返回 CreateIterResultObject(未定义 true
  4.   

SetIterator object's next() section类似,

  
      
  1. 条目成为列表,它是s的[[SetData]]内部插槽的值。
  2.   
  3. 重复,而索引小于条目元素的总数。 每次评估此方法时,必须重新确定元素数量。
  4.   

... ...

  
      
  1. 将O的[[IteratedSet]]内部插槽设置为 undefined
  2.   
  3. 返回 CreateIterResultObject(未定义 true
  4.   

由于每次调用next()时都会重新评估值,如果当前指针( index )大于条目的长度,则它不会抛出错误,而是返回undefined

但是,通常,避免在迭代容器时修改容器。