no-magic-numbers
Запрет на магические числа
«Магические числа» — это числа, которые встречаются несколько раз в коде без явного смысла. Их предпочтительно заменять именованными константами.
var now = Date.now(),
inOneHour = now + (60 * 60 * 1000);
Подробное описание правила
Правило no-magic-numbers призвано сделать код более читаемым и упростить рефакторинг, гарантируя, что специальные числа объявляются как константы для явного указания их значения.
Примеры неправильного кода для этого правила:
/*eslint no-magic-numbers: "error"*/
var dutyFreePrice = 100,
finalPrice = dutyFreePrice + (dutyFreePrice * );
/*eslint no-magic-numbers: "error"*/
var data = ['foo', 'bar', 'baz'];
var dataLast = data[];
/*eslint no-magic-numbers: "error"*/
var SECONDS;
SECONDS = ;
Примеры правильного кода для этого правила:
/*eslint no-magic-numbers: "error"*/
var TAX = 0.25;
var dutyFreePrice = 100,
finalPrice = dutyFreePrice + (dutyFreePrice * TAX);
Параметры
ignore
Массив чисел, которые нужно пропустить. По умолчанию установлено значение []. Если указан, он должен быть Array.
Массив может содержать значения типа number и string. Если это строка, текст должен быть распарсен как bigint литерал (например, "100n").
Примеры правильного кода для параметра { "ignore": [1] }:
/*eslint no-magic-numbers: ["error", { "ignore": [1] }]*/
var data = ['foo', 'bar', 'baz'];
var dataLast = data.length && data[data.length - 1];
Примеры правильного кода для параметра { "ignore": ["1n"] }:
/*eslint no-magic-numbers: ["error", { "ignore": ["1n"] }]*/
foo(1n);
ignoreArrayIndexes
Булево значение, указывающее, считаются ли числа, используемые в контексте индексов массива (например, data[2]), допустимыми. По умолчанию false.
Этот параметр допускает только корректные индексы массивов: числа, которые будут приведены к одному из "0", "1", "2" … "4294967294".
Массивы — это объекты, поэтому они могут иметь имена свойств, такие как "-1" или "2.5". Однако это просто «обычные» свойства объекта, которые не представляют элементы массива. Они не влияют на length массива и игнорируются методами массива, такими как .map или .forEach.
Кроме того, поскольку максимальная длина массива составляет 232 - 1, все значения выше 232 - 2 также представляют собой просто имена обычных свойств и, следовательно, не считаются индексами массива.
Примеры правильного кода для параметра { "ignoreArrayIndexes": true }:
/*eslint no-magic-numbers: ["error", { "ignoreArrayIndexes": true }]*/
var item = data[2];
data[100] = a;
f(data[0]);
a = data[-0]; // same as data[0], -0 will be coerced to "0"
a = data[0xAB];
a = data[5.6e1];
a = data[10n]; // same as data[10], 10n will be coerced to "10"
a = data[4294967294]; // max array index
Примеры неправильного кода для параметра { "ignoreArrayIndexes": true }:
/*eslint no-magic-numbers: ["error", { "ignoreArrayIndexes": true }]*/
f(); // not used as array index
a = data[];
a = data[];
a = data[];
a = data[];
a = data[]; // above the max array index
a = data[]; // same as data["Infinity"]
ignoreDefaultValues
Булево значение, указывающее, считаются ли числа, используемые в присваивании значений по умолчанию, допустимыми. По умолчанию false.
Примеры правильного кода для параметра { "ignoreDefaultValues": true }:
/*eslint no-magic-numbers: ["error", { "ignoreDefaultValues": true }]*/
const { tax = 0.25 } = accountancy;
function mapParallel(concurrency = 3) { /***/ }
/*eslint no-magic-numbers: ["error", { "ignoreDefaultValues": true }]*/
let head;
[head = 100] = []
ignoreClassFieldInitialValues
Булево значение, указывающее, считаются ли числа, используемые в качестве начальных значений полей класса, допустимыми. По умолчанию false.
Примеры правильного кода для параметра { "ignoreClassFieldInitialValues": true }:
/*eslint no-magic-numbers: ["error", { "ignoreClassFieldInitialValues": true }]*/
class C {
foo = 2;
bar = -3;
#baz = 4;
static qux = 5;
}
Примеры неправильного кода для параметра { "ignoreClassFieldInitialValues": true }:
/*eslint no-magic-numbers: ["error", { "ignoreClassFieldInitialValues": true }]*/
class C {
foo = + ;
}
class D {
;
}
enforceConst
Булево значение, указывающее, следует ли проверять ключевое слово const при объявлении переменных чисел. По умолчанию false.
Примеры неправильного кода для параметра { "enforceConst": true }:
/*eslint no-magic-numbers: ["error", { "enforceConst": true }]*/
var TAX = ;
var dutyFreePrice = ,
finalPrice = dutyFreePrice + (dutyFreePrice * TAX);
detectObjects
Булево значение, указывающее, следует ли обнаруживать числа при установке свойств объекта, например. По умолчанию false.
Примеры неправильного кода для параметра { "detectObjects": true }:
/*eslint no-magic-numbers: ["error", { "detectObjects": true }]*/
var magic = {
tax:
};
var dutyFreePrice = 100,
finalPrice = dutyFreePrice + (dutyFreePrice * magic.tax);
Примеры правильного кода для параметра { "detectObjects": true }:
/*eslint no-magic-numbers: ["error", { "detectObjects": true }]*/
var TAX = 0.25;
var magic = {
tax: TAX
};
var dutyFreePrice = 100,
finalPrice = dutyFreePrice + (dutyFreePrice * magic.tax);
Версия
Это правило было добавлено в ESLint v1.7.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-magic-numbers