guard-for-in
Требовать, чтобы циклы for-in включали оператор if
При переборе объектов с помощью цикла for in в него будут включены свойства, унаследованные через цепочку прототипов. Это поведение может привести к появлению неожиданных элементов в цикле for.
for (key in foo) {
doSomething(key);
}
В кодовых базах, не поддерживающих ES2022, Object.prototype.hasOwnProperty.call(foo, key) можно использовать для проверки того, что свойство не унаследовано.
В кодовых базах, поддерживающих ES2022, Object.hasOwn(foo, key) можно использовать как более короткую альтернативу; см. prefer-object-has-own.
Обратите внимание: простая проверка foo.hasOwnProperty(key) в некоторых случаях может привести к ошибке; см. no-prototype-builtins.
Подробное описание правила
Это правило предназначено для предотвращения неожиданного поведения, которое может возникнуть при использовании цикла for in без фильтрации результатов в цикле. Поэтому оно выдаст предупреждение, если циклы for in не фильтруют результаты с помощью оператора if.
Примеры неправильного кода для этого правила:
/*eslint guard-for-in: "error"*/
Примеры правильного кода для этого правила:
/*eslint guard-for-in: "error"*/
for (key in foo) {
if (Object.hasOwn(foo, key)) {
doSomething(key);
}
}
for (key in foo) {
if (Object.prototype.hasOwnProperty.call(foo, key)) {
doSomething(key);
}
}
for (key in foo) {
if ({}.hasOwnProperty.call(foo, key)) {
doSomething(key);
}
}
Параметры
У этого правила нет параметров.
Связанные правила
Версия
Это правило появилось в ESLint v0.0.6.
Дополнительная литература
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/guard-for-in