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