Вопрос проверяет понимание механизма автоупаковки (autoboxing) в JavaScript, который временно оборачивает примитивы в объекты-обёртки для доступа к методам.
В JavaScript примитивные типы (string, number, boolean, null, undefined, symbol, bigint) не являются объектами. У них нет собственных свойств или методов. Однако вы можете вызвать, например, 'hello'.toUpperCase(). Это возможно благодаря механизму автоупаковки (autoboxing).
Когда вы обращаетесь к свойству или методу примитива, JavaScript временно создаёт объект-обёртку соответствующего типа (String, Number, Boolean). Этот объект наследует методы из своего прототипа (String.prototype, Number.prototype и т.д.). После выполнения операции обёртка уничтожается, и примитив остаётся неизменным.
let str = 'hello';
console.log(str.toUpperCase()); // 'HELLO'
// str остаётся 'hello'
// Визуализация:
// 1. Создаётся временный объект new String('hello')
// 2. Вызывается метод toUpperCase() на этом объекте
// 3. Объект удаляется
// 4. Результат возвращаетсяЭтот механизм позволяет работать с примитивами как с объектами, не нагружая память постоянными объектами. Вы можете использовать методы строк, чисел и булевых значений без явного создания обёрток. Однако стоит помнить, что примитивы остаются неизменяемыми — любые методы возвращают новое значение, не изменяя исходное.
Автоупаковка — это удобный синтаксический сахар, который делает код более читаемым и эффективным. Используйте его для работы с примитивами, когда нужны методы объектов, но не злоупотребляйте явным созданием обёрток (например, new String('test')), так как это может привести к путанице с типами.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию