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