# no-magic-numbers

禁止幻数

'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"。但是,这些只是不代表数组元素的 "normal" 对象属性。它们不会影响数组的 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] = []

# 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);
Last Updated: 5/13/2023, 8:55:38 PM