Проверяет понимание механизма автоупаковки примитивов в JavaScript и разницу между примитивом и объектом-обёрткой.
В JavaScript примитивные типы — строка, число, булево значение, null, undefined, символ и bigint — не являются объектами. У них нет свойств и методов. Однако вы можете написать 'hello'.toUpperCase() и получить результат. Это возможно благодаря механизму автоупаковки (autoboxing). Когда движок видит обращение к свойству или методу на примитиве, он создаёт временный объект-обёртку соответствующего типа: для строк — String, для чисел — Number, для булевых — Boolean. Затем метод вызывается на этой обёртке, и после завершения операции обёртка удаляется.
let str = 'hello';
console.log(str.length); // 5 — работает
console.log(str.toUpperCase()); // 'HELLO'
// Внутри происходит примерно так:
let temp = new String(str);
let result = temp.toUpperCase();
temp = null; // обёртка уничтожается
// Примитив остаётся неизменным
console.log(str); // 'hello'Важно понимать, что обёртка создаётся только на время вызова. Если вы попытаетесь добавить свойство примитиву, оно не сохранится:
let num = 5;
num.foo = 'bar';
console.log(num.foo); // undefinedПотому что обёртка создаётся, свойство присваивается ей, а затем обёртка уничтожается, и примитив остаётся без изменений.
Автоупаковка используется повсеместно в JavaScript, когда вы работаете со строками, числами или булевыми значениями. Например, методы split, replace, toFixed, toString — все они вызываются через временные обёртки. Это делает язык удобным, позволяя использовать методы без явного создания объектов.
Автоупаковка — это встроенный механизм JavaScript, который временно превращает примитив в объект для вызова методов. Понимание этого процесса помогает избежать ошибок, связанных с попыткой хранить данные на примитивах, и объясняет, почему примитивы ведут себя как неизменяемые значения.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию