Что такое боксинг в контексте JavaScript?

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

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

Что ответить на собеседовании

В JavaScript "боксинг" (boxing) — это процесс автоматического преобразования примитивного значения (например, строки, числа, булевого значения) во временный объект-обертку (wrapper object) соответствующего встроенного конструктора (String, Number, Boolean) при попытке доступа к его свойствам или методам.

Подробный разбор

Ответ с пояснениями

В JavaScript "боксинг" (boxing) — это процесс автоматического преобразования примитивного значения (например, строки, числа, булевого значения) во временный объект-обертку (wrapper object) соответствующего встроенного конструктора (String, Number, Boolean) при попытке доступа к его свойствам или методам.

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

Примеры:

// Строковый примитив
let s = "Hello";

// Доступ к методу length: Происходит боксинг к String объекту
console.log(s.length); // 5

// Доступ к методу toUpperCase(): Происходит боксинг к String объекту
console.log(s.toUpperCase()); // HELLO

// Числовой примитив
let n = 123;

// Доступ к методу toString(): Происходит боксинг к Number объекту
console.log(n.toString()); // "123"

// Булевый примитив
let b = true;

// Доступ к методу valueOf(): Происходит боксинг к Boolean объекту
console.log(b.valueOf()); // true

Важно понимать, что сами примитивы не имеют свойств или методов. Боксинг делает работу с примитивами более удобной, позволяя использовать синтаксис объектного доступа для выполнения операций.

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

Различия между примитивами и объектами-обертками:

Примитив Объект-обертка
Тип Строка, Число, Булев, Symbol, Null, Undefined, BigInt Ссылка на объект
Изменчивость Неизменяемый Изменяемый
Сравнение Сравнение по значению Сравнение по ссылке
Создание Литерал, typeof возвращает примитивный тип new, typeof возвращает 'object'

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее