gav*_*koa 26 javascript ecmascript-6
安全代码new Set()可能如下所示:
let items = [];
for (let item of set)
if (isBad(item))
items.push(item);
for (let item of items)
set.delete(item)
Run Code Online (Sandbox Code Playgroud)
我可以简化代码:
for (let item of set)
if (isBad(item))
set.delete(item);
Run Code Online (Sandbox Code Playgroud)
安全代码new Map()可能如下所示:
let keys = [];
for (let [key, val] of map)
if (isBadKey(key) || isBadValue(val))
keys.push(key);
for (let key of keys)
map.delete(key)
Run Code Online (Sandbox Code Playgroud)
我可以简化代码:
for (let [key, val] of map)
if (isBadJey(key) || isBadValue(val))
map.delete(key)
Run Code Online (Sandbox Code Playgroud)
Ber*_*rgi 28
是的,你可以简化,这是完全安全的.
从最后一点开始,唯一危险的事情就是这样
const s = new Set([1]);
for (let x of s) {
s.delete(x);
s.add(1);
}
Run Code Online (Sandbox Code Playgroud)
但不是因为未定义的行为或内存累积,而是因为无限循环.
我会说是的,这是安全的.当您使用for ... of引擎盖迭代Set/Map时,循环将通过@@ iterator.和迭代器与工作.next()只:所以没有指标,也不管是什么当前位置之前.只有一个下一个元素很重要.
因此,除非在当前迭代器位置"之前"删除元素,否则可以安全地执行此操作.
| 归档时间: |
|
| 查看次数: |
4924 次 |
| 最近记录: |