guard-for-in
Требуется, чтобы циклы for-in включали оператор if.
Перебор свойств объектов с помощью цикла for in включает свойства, унаследованные через цепочку прототипов. Это поведение может привести к неожиданным элементам в цикле.
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