版本

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 * 0.25);
在游乐场中打开
/*eslint no-magic-numbers: "error"*/

var data = ['foo', 'bar', 'baz'];

var dataLast = data[2];
在游乐场中打开
/*eslint no-magic-numbers: "error"*/

var SECONDS;

SECONDS = 60;

此规则的**正确**代码示例

在游乐场中打开
/*eslint no-magic-numbers: "error"*/

var TAX = 0.25;

var dutyFreePrice = 100,
    finalPrice = dutyFreePrice + (dutyFreePrice * TAX);

选项

ignore

要忽略的数字数组。默认情况下设置为[]。如果提供,它必须是Array

该数组可以包含numberstring 类型的值。如果它是字符串,则文本必须解析为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(2); // not used as array index

a = data[-1];

a = data[2.5];

a = data[5.67e1];

a = data[-10n];

a = data[4294967295]; // above the max array index

a = data[1e500]; // 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 = 2 + 3;
}

class D {
    2;
}

enforceConst

一个布尔值,用于指定我们是否应该在数字变量声明中检查 const 关键字。默认值为false

{ "enforceConst": true } 选项的**错误**代码示例

在游乐场中打开
/*eslint no-magic-numbers: ["error", { "enforceConst": true }]*/

var TAX = 0.25;

var dutyFreePrice = 100,
    finalPrice = dutyFreePrice + (dutyFreePrice * TAX);

detectObjects

一个布尔值,用于指定我们是否应该在设置对象属性时检测数字,例如。默认值为false

{ "detectObjects": true } 选项的**错误**代码示例

在游乐场中打开
/*eslint no-magic-numbers: ["error", { "detectObjects": true }]*/

var magic = {
  tax: 0.25
};

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

资源

更改语言