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"
。第二個問題與布林物件有關。每個物件都是 truthy,這表示即使 Boolean
實例的實際值為 false
,它始終會解析為 true
。
基於這些原因,避免使用 new
運算子搭配原始包裝器型別被認為是最佳實務。
規則詳情
此規則旨在消除對 String
、Number
和 Boolean
使用 new
運算子的情況。因此,每當看到 new String
、new Number
或 new Boolean
時,它都會發出警告。
此規則的 錯誤 程式碼範例
在 Playground 中開啟
/*eslint no-new-wrappers: "error"*/
var stringObject = ;
var numberObject = ;
var booleanObject = ;
var stringObject = ;
var numberObject = ;
var booleanObject = ;
此規則的 正確 程式碼範例
在 Playground 中開啟
/*eslint no-new-wrappers: "error"*/
var text = String(someValue);
var num = Number(someValue);
var object = new MyString();
何時不該使用
如果您想要允許使用原始包裝器物件,則可以安全地停用此規則。
相關規則
版本
此規則在 ESLint v0.0.6 中引入。