Spec-Zone.ru › ESLint

no-undefined

Запрещает использовать undefined в качестве идентификатора

❄️ Заморожено

Это правило в настоящее время заморожено, и запросы на новые функции не принимаются.

Переменная undefined в JavaScript на самом деле является свойством глобального объекта. Поэтому в ECMAScript 3 можно было перезаписать значение undefined. Хотя ECMAScript 5 запрещает перезаписывать undefined, по-прежнему можно затенить undefined, например:

function doSomething(data) {
    const undefined = "hi";

    // doesn't do what you think it does
    if (data === undefined) {
        // ...
    }

}

Поскольку undefined можно перезаписать или затенить, чтение undefined может вернуть неожиданное значение. (Это не относится к null — ключевому слову, которое всегда возвращает одно и то же значение.) Чтобы избежать этого, можно полностью отказаться от использования undefined, как рекомендуют некоторые руководства по стилю и требует это правило. В таких руководствах также рекомендуется:

  • Переменные, которым следует иметь значение undefined, просто оставляют неинициализированными. (В JavaScript все неинициализированные переменные автоматически получают значение undefined.)
  • Проверять, имеет ли значение значение undefined, следует с помощью typeof.
  • При необходимости использовать оператор void для создания значения undefined.

В качестве альтернативы можно использовать правила no-global-assign и no-shadow-restricted-names, чтобы запретить затенение undefined или присваивание ему другого значения. Это гарантирует, что undefined всегда будет сохранять исходное ожидаемое значение.

Описание правила

Это правило призвано исключить использование undefined и поэтому выдает предупреждение при каждом таком использовании.

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

Открыть в Playground
/*eslint no-undefined: "error"*/

const foo = undefined;

const undefined = "foo";

if (foo === undefined) {
    // ...
}

function baz(undefined) {
    // ...
}

bar(undefined, "lorem");

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

Открыть в Playground
/*eslint no-undefined: "error"*/

const foo = void 0;

const Undefined = "foo";

if (typeof foo === "undefined") {
    // ...
}

global.undefined = "foo";

bar(void 0, "lorem");

Параметры

У этого правила нет параметров.

Когда не следует использовать это правило

Если вы хотите разрешить использование undefined в коде, это правило можно отключить.

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

  • no-undef-init
  • no-void
  • no-shadow-restricted-names
  • no-global-assign

Версия

Это правило появилось в ESLint v0.7.1.

Дополнительная литература

undefined — JavaScript | MDN
developer.mozilla.org
Понимание значения ‘undefined’ в JavaScript
javascriptweblog.wordpress.com
ES5 с комментариями
es5.github.io

Ресурсы

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

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

Spec-Zone.ru

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