假设我有一个像这样的函数:
const hasAny = xs => {
for (const x of xs) {
return true;
}
return false;
};
eslint将抱怨未使用x
,实际上并没有使用。
我可以编写不声明任何变量的for-of循环吗?
答案 0 :(得分:13)
不,您不能,通常情况下不会。¹不过,您可以直接使用迭代器²,
const hasAny = xs => !xs[Symbol.iterator]().next().done;
或者,如果您想确保主动释放迭代器拥有的任何资源(而不是等待它们自动释放,请考虑使用生成器函数或类似功能中的数据库连接),如果需要,主动调用return
提供return
的功能(并非全部提供),就像for-of
的功能一样:
const hasAny = xs => {
const it = xs[Symbol.iterator]();
const result = !it.next().done;
if (it.return) it.return();
return result;
};
实时示例:
const hasAny = xs => !xs[Symbol.iterator]().next().done;
console.log(hasAny([])); // false
console.log(hasAny([1])); // true
¹如果您确定迭代器的第一个值不是null
或undefined
,则可以执行this destructuring trick。
²对于任何不认识的人,for-of
在幕后使用迭代器。
答案 1 :(得分:1)
您可以对空对象使用解构:
const hasAny = xs => {
for (const {} of xs) {
return true;
}
return false;
};
更新:当列表包含undefined
时,此功能不起作用。
答案 2 :(得分:1)
根据ESLint问题#2173,您可以设置注释以忽略未使用的变量。为此,请使用以下代码:
var some_unused_variable; // eslint-disable-line no-unused-vars
ESLint的社区成员还指出:
我们现在有一个
varsIgnorePattern
选项可用于该用例(最适合忽略所有文件中特定的未使用的变量名或模式)。
文档说明:
varsIgnorePattern选项指定不检查使用情况的异常:名称与正则表达式模式匹配的变量。例如,名称包含忽略或忽略的变量。
{“ varsIgnorePattern”:“ [iI] gnored”}选项的正确代码示例:
/*eslint no-unused-vars: ["error", { "varsIgnorePattern": "[iI]gnored" }]*/ var firstVarIgnored = 1; var secondVar = 2; console.log(secondVar);