← Назад к вопросам

Что будет если в typeof передать new String("")?

1.0 Junior🔥 111 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Ответ на вопрос: typeof new String("")

В JavaScript оператор typeof при передаче ему объекта, созданного через конструктор new String(""), вернёт строку "object". Это происходит из-за особенностей работы оператора typeof и различий между примитивными строками и объектами-строками (String-объектами).

Разбор примера

let strObject = new String("Hello");
console.log(typeof strObject); // "object"

Почему так происходит?

  1. new String("") создаёт объект, а не примитив:

    • Конструктор String при вызове с оператором new создаёт экземпляр объекта-оболочки (wrapper object), который представляет собой объект, содержащий примитивное строковое значение.
    • В JavaScript строки могут быть представлены как примитивные значения (string primitive) или как объекты (String object). Оператор typeof различает их.
  2. Поведение typeof:

    • typeof возвращает "string" только для примитивных строк.
    • Для любых объектов (включая new String, new Number, new Boolean) typeof возвращает "object" (за исключением функций, где возвращается "function").

Сравнение с примитивной строкой

let primitiveStr = "Hello";
let objectStr = new String("Hello");

console.log(typeof primitiveStr);  // "string"
console.log(typeof objectStr);     // "object"

Практические последствия

Использование new String() может привести к неожиданному поведению:

  • Сравнение значений:

    let s1 = "test";
    let s2 = new String("test");
    
    console.log(s1 == s2);  // true (нестрогое сравнение приводит к преобразованию типов)
    console.log(s1 === s2); // false (разные типы: string vs object)
    
  • Автоматическая упаковка (boxing): JavaScript автоматически оборачивает примитивы в объекты при необходимости вызова методов:

    let primitive = "text";
    console.log(primitive.toUpperCase()); // "TEXT" - временное преобразование в String-объект
    
  • Избыточное использование памяти: new String создаёт полноценный объект, что требует больше ресурсов, чем примитив.

Рекомендации

  • Избегайте new String() в большинстве случаев. Примитивные строки эффективнее и предсказуемее.
  • Используйте литеральную нотацию ("..." или '...') для создания строк.
  • new String() может быть полезен в исключительных ситуациях, например, при необходимости расширения функциональности через прототип, но такие случаи крайне редки.

Заключение

Использование new String("") создаёт объект-обёртку, поэтому typeof вернёт "object". Это подчёркивает важность понимания различий между примитивными типами и их объектными аналогами в JavaScript. Для повседневной работы всегда предпочитайте примитивные строки как более простой и эффективный вариант.

Что будет если в typeof передать new String("")? | PrepBro