no-unmodified-loop-condition
禁止未修改的循环条件
循环条件中的变量通常在循环中被修改。如果未修改,则可能存在错误。
while (node) {
doSomething(node);
}
while (node) {
doSomething(node);
node = node.parent;
}
规则详情
此规则查找循环条件内的引用,然后检查这些引用的变量是否在循环中被修改。
如果引用位于二元表达式或三元表达式内,则此规则会检查表达式的结果。如果引用位于动态表达式(例如 CallExpression
、YieldExpression
等)内,则此规则会忽略它。
此规则的 **不正确** 代码示例
在游乐场中打开
/*eslint no-unmodified-loop-condition: "error"*/
var node = something;
while () {
doSomething(node);
}
node = other;
for (var j = 0; < 5;) {
doSomething(j);
}
while ( !== root) {
doSomething(node);
}
此规则的 **正确** 代码示例
在游乐场中打开
/*eslint no-unmodified-loop-condition: "error"*/
while (node) {
doSomething(node);
node = node.parent;
}
for (var j = 0; j < items.length; ++j) {
doSomething(items[j]);
}
// OK, the result of this binary expression is changed in this loop.
while (node !== root) {
doSomething(node);
node = node.parent;
}
// OK, the result of this ternary expression is changed in this loop.
while (node ? A : B) {
doSomething(node);
node = node.parent;
}
// A property might be a getter which has side effect...
// Or "doSomething" can modify "obj.foo".
while (obj.foo) {
doSomething(obj);
}
// A function call can return various values.
while (check(obj)) {
doSomething(obj);
}
何时不使用它
如果您不想收到有关循环条件内引用的通知,则可以禁用此规则。
版本
此规则是在 ESLint v2.0.0-alpha-2 中引入的。