Spec-Zone.ru › ESLint

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 = new String("Hello world");
var numberObject = new Number(33);
var booleanObject = new Boolean(false);

var stringObject = new String;
var numberObject = new Number;
var booleanObject = new Boolean;

Примеры правильного кода для этого правила:

Открыть в среде разработки
/*eslint no-new-wrappers: "error"*/

var text = String(someValue);
var num = Number(someValue);

var object = new MyString();

Когда не следует использовать это правило

Если вы хотите разрешить использование примитивных обёртко-объектов, то можете безопасно отключить это правило.

Связанные правила

  • no-array-constructor
  • no-object-constructor

Версия

Это правило было добавлено в ESLint v0.0.6.

Дополнительное чтение

Неподдерживаемый браузер

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-new-wrappers

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API