Spec-Zone.ru › ESLint

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.

Примеры некорректного кода для этого правила:

Открыть в Playground
/*eslint guard-for-in: "error"*/

for(key in foo){doSomething(key);}

Примеры корректного кода для этого правила:

Открыть в Playground
/*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);
    }
}

Связанные правила

  • prefer-object-has-own
  • no-prototype-builtins

Версия

Это правило было добавлено в ESLint v0.0.6.

Дополнительное чтение

Изучение циклов for-in в JavaScript
Опасности использования объектов как карт в JavaScript

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/guard-for-in

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API