Проверяет понимание того, как JavaScript позволяет обращаться к свойствам и методам примитивных строк, несмотря на то что примитивы не являются объектами.
В JavaScript строки бывают двух видов: примитивные значения (например, "hello") и объекты-обёртки, созданные через new String("hello"). Примитив по определению не имеет свойств и методов — это просто неизменяемое значение. Однако в коде мы спокойно пишем "hello".length или "hello".toUpperCase(), и это работает. Причина — механизм автоупаковки (autoboxing), встроенный в движок.
Когда интерпретатор видит обращение к свойству или методу у примитива, он выполняет следующие шаги:
String).String.prototype).Именно поэтому length и методы вроде toUpperCase, slice, indexOf доступны у строковых примитивов: они определены в String.prototype, а обёртка даёт к ним доступ.
const s = "hello";
console.log(s.length); // 5 — сработала автоупаковка
console.log(s.toUpperCase()); // "HELLO"
// Эквивалент того, что делает движок под капотом:
const tmp = new String(s);
console.log(tmp.length); // 5
// tmp уничтожается, s остаётся примитивом
console.log(typeof s); // "string"
// Важное следствие: свойства у примитива не сохраняются
s.custom = 42;
console.log(s.custom); // undefined — обёртка уже уничтожена
"a" === new String("a") даёт false, потому что типы разные.Number), булевых значений (Boolean) и символов (Symbol).Итог: автоупаковка позволяет писать код с примитивами так, будто это объекты, не создавая их вручную. Понимание этого механизма помогает избежать ошибок при сравнении типов и при попытке сохранить состояние на примитиве.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию