Spec-Zone.ru › ESLint

no-undef-init

Запретить инициализацию переменных значением undefined

🔧 Исправляемое

Некоторые проблемы, о которых сообщает это правило, можно исправить автоматически с помощью параметра командной строки --fix

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

Это правило в настоящее время заморожено, и запросы на добавление новых возможностей не принимаются.

В JavaScript переменная, объявленная без инициализации каким-либо значением, автоматически получает значение undefined. Например:

var foo;

console.log(foo === undefined);     // true

Поэтому инициализировать переменную значением undefined не нужно, например:

var foo = undefined;

Считается хорошей практикой избегать инициализации переменных значением undefined.

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

Это правило призвано исключить объявления переменных var и let, инициализируемых значением undefined.

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

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

var foo = undefined;
let bar = undefined;

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

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

var foo;
let bar;

Обратите внимание: это правило не проверяет объявления const, объявления using, объявления await using, шаблоны деструктуризации, параметры функций и поля классов.

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

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

const foo = undefined;

using foo1 = undefined;

await using foo2 = undefined;

let { bar = undefined } = baz;

[quux = undefined] = quuux;

(foo = undefined) => {};

class Foo {
    bar = undefined;
}

Параметры

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

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

В некоторых ситуациях инициализация значением undefined ведёт себя не так, как отсутствие инициализации.

Один из таких случаев — объявление var внутри цикла. Например:

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

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

for (i = 0; i < 10; i++) {
    var x = undefined;
    console.log(x);
    x = i;
}

В этом случае var x поднимается за пределы цикла, фактически создавая следующий код:

var x;

for (i = 0; i < 10; i++) {
    x = undefined;
    console.log(x);
    x = i;
}

Если удалить инициализацию, поведение цикла изменится:

for (i = 0; i < 10; i++) {
    var x;
    console.log(x);
    x = i;
}

Этот код эквивалентен следующему:

var x;

for (i = 0; i < 10; i++) {
    console.log(x);
    x = i;
}

Результат будет отличаться от объявления var x = undefined внутри цикла, поскольку x больше не будет сбрасываться в значение undefined при каждой итерации цикла.

Если вы используете такую инициализацию внутри цикла, отключите это правило.

Пример правильного кода для этого правила, поскольку оно отключено в конкретной строке:

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

for (i = 0; i < 10; i++) {
    var x = undefined; // eslint-disable-line no-undef-init
    console.log(x);
    x = i;
}

Ещё один такой случай — повторное объявление переменной с помощью var. Например:

function foo() {
    var x = 1;
    console.log(x); // output: 1

    var x;
    console.log(x); // output: 1

    var x = undefined;
    console.log(x); // output: undefined
}

foo();

В этом случае можно избежать повторного объявления, заменив его присваиванием (x = undefined;), или использовать комментарий eslint для отключения правила в конкретной строке.

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

  • no-undefined
  • no-void

Версия

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

Ресурсы

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

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

Spec-Zone.ru

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