sdg*_*sdh 11 javascript for-loop
假设我有这样的函数:
const hasAny = xs => {
for (const x of xs) {
return true;
}
return false;
};
Run Code Online (Sandbox Code Playgroud)
eslint会抱怨x没有使用,事实上并非如此.
我可以编写一个不声明任何变量的for-of循环吗?
T.J*_*der 13
不,你不能,不是一般情况.¹你可以直接使用iterator²,但是:
const hasAny = xs => !xs[Symbol.iterator]().next().done;
Run Code Online (Sandbox Code Playgroud)
或者如果你想确保主动释放迭代器所拥有的任何资源(而不是等待它们自动释放 - 想想生成器函数中的数据库连接或类似的东西),return如果它提供了一个return(不是全部),那么主动调用它for-of在幕后:
const hasAny = xs => {
const it = xs[Symbol.iterator]();
const result = !it.next().done;
if (it.return) it.return();
return result;
};
Run Code Online (Sandbox Code Playgroud)
实例:
const hasAny = xs => !xs[Symbol.iterator]().next().done;
console.log(hasAny([])); // false
console.log(hasAny([1])); // trueRun Code Online (Sandbox Code Playgroud)
¹如果你确定迭代器的第一个值不是null或者undefined,你可以做这个解构技巧.
² 对于任何不了解的人,for-of使用封底下的迭代器.
| 归档时间: |
|
| 查看次数: |
1365 次 |
| 最近记录: |