no-new-wrappers
Запрещает операторы new с объектами String, Number и Boolean
В JavaScript есть три примитивных типа, у которых имеются объекты-обёртки: string, number и boolean. Они представлены конструкторами String, Number и Boolean соответственно. Примитивные типы-обёртки используются при чтении значений этих примитивных типов, предоставляя им возможности объектов, например методы. За кулисами создаётся объект соответствующего типа-обёртки, а затем уничтожается. Именно поэтому можно вызывать методы у примитивных значений, например:
const text = "Hello world".substring(2);
За кулисами в этом примере создаётся объект String. Метод substring() существует у String.prototype, поэтому он доступен экземпляру строки.
Также можно вручную создать новый экземпляр обёртки:
const stringObject = new String("Hello world");
const numberObject = new Number(33);
const booleanObject = new Boolean(false);
Хотя это и возможно, нет веских причин использовать эти примитивные обёртки в качестве конструкторов. Они скорее запутают других разработчиков, поскольку кажутся обычными примитивами, но таковыми не являются. Например:
const stringObject = new String("Hello world");
console.log(typeof stringObject); // "object"
const text = "Hello world";
console.log(typeof text); // "string"
const booleanObject = new Boolean(false);
if (booleanObject) { // all objects are truthy!
console.log("This executes");
}
Первая проблема заключается в том, что объекты-обёртки примитивных типов на самом деле являются объектами. Это означает, что typeof вернёт "object" вместо "string", "number" или "boolean". Вторая проблема связана с объектами boolean. Все объекты являются истинными в логическом контексте, а это означает, что экземпляр Boolean всегда преобразуется в true, даже если его фактическое значение — false.
По этим причинам считается хорошей практикой избегать использования примитивных типов-обёрток с оператором new.
Подробное описание правила
Это правило призвано исключить использование String, Number и Boolean с оператором new. Поэтому оно выдаёт предупреждение при обнаружении new String, new Number или new Boolean.
Примеры неправильного кода для этого правила:
/*eslint no-new-wrappers: "error"*/
const stringObject = ;
const numberObject = ;
const booleanObject = ;
const stringObject2 = ;
const numberObject2 = ;
const booleanObject2 = ;
Примеры правильного кода для этого правила:
/*eslint no-new-wrappers: "error"*/
const text = String(someValue);
const num = Number(someValue);
const 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