no-undef-init
Запретить инициализацию переменных значением undefined
Некоторые проблемы, о которых сообщает это правило, можно исправить автоматически с помощью параметра командной строки --fix
Это правило в настоящее время заморожено, и запросы на добавление новых возможностей не принимаются.
В JavaScript переменная, объявленная без инициализации каким-либо значением, автоматически получает значение undefined. Например:
var foo;
console.log(foo === undefined); // true
Поэтому инициализировать переменную значением undefined не нужно, например:
var foo = undefined;
Считается хорошей практикой избегать инициализации переменных значением undefined.
Подробности правила
Это правило призвано исключить объявления переменных var и let, инициализируемых значением undefined.
Примеры неправильного кода для этого правила:
/*eslint no-undef-init: "error"*/
var ;
let ;
Примеры правильного кода для этого правила:
/*eslint no-undef-init: "error"*/
var foo;
let bar;
Обратите внимание: это правило не проверяет объявления const, объявления using, объявления await using, шаблоны деструктуризации, параметры функций и поля классов.
Примеры дополнительного правильного кода для этого правила:
/*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 внутри цикла. Например:
Пример неправильного кода для этого правила:
/*eslint no-undef-init: "error"*/
for (i = 0; i < 10; i++) {
var ;
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 при каждой итерации цикла.
Если вы используете такую инициализацию внутри цикла, отключите это правило.
Пример правильного кода для этого правила, поскольку оно отключено в конкретной строке:
/*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 для отключения правила в конкретной строке.
Связанные правила
Версия
Это правило появилось в ESLint v0.0.6.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-undef-init