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