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, когда это необходимо. Однако, из-за накладных расходов, связанных с созданием объектных оберток, рекомендуется использовать примитивные типы данных, где это возможно, особенно в случаях, когда происходят частые операции чтения и записи.