Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: string literal, new String, primitive, object, JavaScript

В чем разница между созданием строки через литерал и через new?

Вопрос проверяет понимание различий между созданием строк через литерал и конструктор new String(), а также знание особенностей работы с примитивами и объектами в JavaScript.

Короткий ответ

Создание строки через литерал (например, 'hello') возвращает примитивное строковое значение. Создание через new String('hello') возвращает объект-обёртку (String object). Примитивы легче, сравниваются по значению, а объекты — по ссылке. Объекты String редко нужны на практике, их использование может привести к путанице при сравнении.

Длинный ответ

В JavaScript строки могут быть представлены как примитивные значения (string primitives) или как объекты (String objects). Понимание разницы важно для корректной работы с типами данных, сравнения и эффективности кода.

Создание через литерал

Использование строкового литерала (одинарные, двойные или обратные кавычки) создаёт примитивное строковое значение.

const strPrimitive = 'Hello World'; // Примитив
console.log(typeof strPrimitive); // "string"

Примитивы неизменяемы, легковесны и сравниваются по значению. JavaScript автоматически оборачивает примитив в объект String при необходимости вызова методов (например, .toUpperCase()).

Создание через new String()

Использование конструктора new String() создаёт объект-обёртку (String object).

const strObject = new String('Hello World'); // Объект
console.log(typeof strObject); // "object"

Это полноценный объект, который хранит строковое значение внутри себя. Объекты сравниваются по ссылке, а не по значению, что может привести к неожиданностям.

Ключевые различия и примеры

  • Тип данных: Литерал — "string", new String — "object".
  • Сравнение: Примитивы сравниваются по значению, объекты — по ссылке.
  • const lit1 = 'test';
    const lit2 = 'test';
    console.log(lit1 === lit2); // true (одинаковые значения)
    
    const obj1 = new String('test');
    const obj2 = new String('test');
    console.log(obj1 === obj2); // false (разные объекты в памяти)
  • Использование: Методы строк доступны и для примитивов благодаря автоупаковке (boxing). Объекты String избыточны для большинства задач.
  • Производительность: Примитивы эффективнее по памяти и быстрее в операциях.

Где может пригодиться new String()?

Практически никогда. Исторически это могло использоваться для расширения прототипа или в очень специфических случаях, когда требовалось явно работать с объектом. В современном коде это считается антипаттерном.

Вывод: Всегда используйте строковые литералы для создания строк. Конструктор new String() может ввести в заблуждение, усложнить сравнение и ухудшить производительность. Его применение оправдано только в исключительных ситуациях, например, при низкоуровневых экспериментах с прототипами.

Уровень

  • Рейтинг:

    3

  • Сложность:

    2

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#string literal

#new String

#primitive

#object

#JavaScript

Подпишись на Java Developer в телеграм