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 中引入。