
Boxing и unboxing - это процессы преобразования между примитивными типами данных и соответствующими объектными обертками в JavaScript.
Boxing (упаковка) - это процесс, при котором примитивное значение преобразуется в соответствующий объектный тип данных, такой как String, Number или Boolean. Это происходит автоматически при обращении к свойствам или методам объектных оберток для примитивных значений.
Например:
const str = "Hello, world!";
const strObj = new String(str); // явное создание объектной обертки
const length = str.length; // неявное создание объектной обертки
console.log(typeof str); // "string"
console.log(typeof strObj); // "object"
console.log(typeof length); // "number"В этом примере мы создаем строку str и объектную обертку strObj, которая оборачивает эту строку. Затем мы имплицитно создаем объектную обертку для строки, обращаясь к свойству length.
Unboxing (распаковка) - это процесс, при котором объектная обертка преобразуется обратно в примитивный тип данных. Это происходит, когда нам нужно использовать примитивное значение, а не объектную обертку, например, при выполнении арифметических операций.
Например:
const numObj = new Number(42);
const num = numObj.valueOf();
console.log(typeof numObj); // "object"
console.log(typeof num); // "number"В этом примере мы создаем объектную обертку numObj для числа 42. Затем мы используем метод valueOf(), чтобы получить примитивное значение из объектной обертки и сохранить его в переменной num.
Boxing и unboxing происходят автоматически в JavaScript, когда это необходимо. Однако, из-за накладных расходов, связанных с созданием объектных оберток, рекомендуется использовать примитивные типы данных, где это возможно, особенно в случаях, когда происходят частые операции чтения и записи.