Spec-Zone.ru › ESLint

no-undefined

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

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

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

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

}

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

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

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

Подробное описание правила

Это правило направлено на устранение использования undefined, и, следовательно, генерирует предупреждение всякий раз, когда оно используется.

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

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

var foo = undefined;

var undefined = "foo";

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

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

bar(undefined, "lorem");

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

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

var foo = void 0;

var 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
Понимание JavaScript «undefined»
Комментированный ES5

Ресурсы

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

© 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