2015-09-04 48 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

    相關問題