Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: autoboxing, primitive wrapper, String object, JavaScript coercion

Почему на примитивной строке можно вызывать методы объекта?

Вопрос проверяет понимание механизма автоупаковки примитивов в JavaScript и того, как примитивные значения временно оборачиваются в объекты-обертки для вызова методов.

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

В JavaScript примитивные типы (строки, числа, булевы значения) временно оборачиваются в соответствующие объекты-обертки (String, Number, Boolean) при попытке доступа к свойствам или методам. Это называется автоупаковкой (autoboxing). После выполнения операции обертка уничтожается, и значение снова становится примитивом. Благодаря этому механизму можно вызывать методы на примитивах, хотя сами примитивы не имеют методов.

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

Как работает вызов методов на примитивах

В JavaScript примитивные типы данных (строки, числа, булевы значения, null, undefined, symbol, bigint) не являются объектами и не имеют собственных методов. Однако вы можете написать 'hello'.toUpperCase() и получить результат. Это возможно благодаря механизму автоупаковки (autoboxing).

Когда вы обращаетесь к свойству или методу примитива, JavaScript временно создает объект-обертку соответствующего типа: для строк — String, для чисел — Number, для булевых — Boolean. Затем вызывается метод на этом объекте, и после выполнения обертка уничтожается, возвращая примитивное значение.

Пример работы автоупаковки

let str = 'hello';
console.log(str.length); // 5
// JavaScript делает: new String('hello').length

let num = 42;
console.log(num.toFixed(2)); // '42.00'
// JavaScript делает: new Number(42).toFixed(2)

let bool = true;
console.log(bool.toString()); // 'true'
// JavaScript делает: new Boolean(true).toString()

Важные нюансы

  • Автоупаковка не изменяет исходный примитив — он остается неизменным.
  • Обертки создаются и уничтожаются каждый раз при обращении, что может влиять на производительность в циклах.
  • Сравнение примитива и объекта-обертки через == может давать неожиданные результаты из-за приведения типов.

Вывод

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

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

#autoboxing

#primitive wrapper

#String object

#JavaScript coercion

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

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию