no-new-wrappers
Запретить использование операторов new с объектами String, Number, и Boolean.
В 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.
Подробное описание правила
Это правило призвано устранить использование String, Number, и Boolean с оператором new. В связи с этим, оно выдает предупреждение всякий раз, когда встречает 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.
Дополнительное чтение
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-new-wrappers