no-magic-numbers
禁用魔法数字
此规则目前处于冻结状态,不接受功能请求。
“魔法数字”是指在代码中多次出现但没有明确含义的数字。它们最好用命名的常量来代替。
const now = Date.now(),
    inOneHour = now + (60 * 60 * 1000);
规则详情
no-magic-numbers 规则旨在通过确保特殊数字被声明为常量以使其含义明确,从而使代码更具可读性并更容易重构。
此规则的 错误 代码示例
/*eslint no-magic-numbers: "error"*/
const dutyFreePrice = 100,
    finalPrice = dutyFreePrice + (dutyFreePrice * );
/*eslint no-magic-numbers: "error"*/
const data = ['foo', 'bar', 'baz'];
const dataLast = data[];
/*eslint no-magic-numbers: "error"*/
let SECONDS;
SECONDS = ;
此规则的 正确 代码示例
/*eslint no-magic-numbers: "error"*/
const TAX = 0.25;
const dutyFreePrice = 100,
    finalPrice = dutyFreePrice + (dutyFreePrice * TAX);
选项
ignore
要忽略的数字数组。 默认设置为 []。 如果提供,则必须是 Array。
数组可以包含 number 和 string 类型的值。 如果它是字符串,则文本必须解析为 bigint 字面量(例如,"100n")。
示例 { "ignore": [1] } 选项的 正确 代码示例
/*eslint no-magic-numbers: ["error", { "ignore": [1] }]*/
const data = ['foo', 'bar', 'baz'];
const 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 }]*/
const 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 }]*/
let TAX = ;
let dutyFreePrice = ,
    finalPrice = dutyFreePrice + (dutyFreePrice * TAX);
detectObjects
一个布尔值,用于指定我们是否应该在设置对象属性时检测数字,例如。 默认为 false。
{ "detectObjects": true } 选项的 错误 代码示例
/*eslint no-magic-numbers: ["error", { "detectObjects": true }]*/
const magic = {
  tax: 
};
const dutyFreePrice = 100,
    finalPrice = dutyFreePrice + (dutyFreePrice * magic.tax);
{ "detectObjects": true } 选项的 正确 代码示例
/*eslint no-magic-numbers: ["error", { "detectObjects": true }]*/
const TAX = 0.25;
const magic = {
  tax: TAX
};
const dutyFreePrice = 100,
    finalPrice = dutyFreePrice + (dutyFreePrice * magic.tax);
版本
此规则在 ESLint v1.7.0 中引入。