Spec-Zone.ru › ESLint

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.

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

Открыть в 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
javascriptweblog.wordpress.com
Подводные камни использования объектов в качестве отображений в JavaScript
2ality.com

Ресурсы

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

© 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