no-new-wrappers
禁止使用 String
、Number
和 Boolean
对象的 new
运算符
JavaScript 中有三种具有包装对象的原始类型:字符串、数字和布尔值。它们分别由构造函数 String
、Number
和 Boolean
表示。每当读取这些原始值之一时,就会使用原始包装类型,为它们提供类似对象的功能,例如方法。在幕后,会创建一个关联包装类型的对象,然后将其销毁,这就是为什么您可以对原始值调用方法的原因,例如
var text = "Hello world".substring(2);
在这个例子中,在幕后,会创建一个 String
对象。substring()
方法存在于 String.prototype
上,因此字符串实例可以访问它。
也可以手动创建一个新的包装实例
var stringObject = new String("Hello world");
var numberObject = new Number(33);
var booleanObject = new Boolean(false);
虽然可以,但没有充分的理由将这些原始包装器用作构造函数。它们往往比任何其他东西都更让其他开发人员感到困惑,因为它们看起来应该充当原始类型,但事实并非如此。例如
var stringObject = new String("Hello world");
console.log(typeof stringObject); // "object"
var text = "Hello world";
console.log(typeof text); // "string"
var booleanObject = new Boolean(false);
if (booleanObject) { // all objects are truthy!
console.log("This executes");
}
第一个问题是原始包装对象实际上是对象。这意味着 typeof
将返回 "object"
,而不是 "string"
、"number"
或 "boolean"
。第二个问题与布尔对象有关。每个对象都是真值,这意味着 Boolean
的实例总是解析为 true
,即使其实际值为 false
。
出于这些原因,避免使用 new
的原始包装类型被认为是一种最佳实践。
规则详细信息
这条规则旨在消除使用 new
运算符的 String
、Number
和 Boolean
。因此,只要看到 new String
、new Number
或 new Boolean
,就会发出警告。
此规则的 错误 代码示例
在游乐场中打开
/*eslint no-new-wrappers: "error"*/
var stringObject = ;
var numberObject = ;
var booleanObject = ;
var stringObject = ;
var numberObject = ;
var booleanObject = ;
此规则的 正确 代码示例
在游乐场中打开
/*eslint no-new-wrappers: "error"*/
var text = String(someValue);
var num = Number(someValue);
var object = new MyString();
何时不使用它
如果您想允许使用原始包装对象,那么您可以安全地禁用此规则。
相关规则
版本
此规则是在 ESLint v0.0.6 中引入的。