Проверяет понимание механизма автоупаковки (boxing) примитивов в JavaScript и того, как у примитивных значений появляются методы объектов.
В JavaScript есть семь примитивных типов: string, number, boolean, null, undefined, symbol и bigint. Примитивы не являются объектами, у них нет собственных свойств и методов. Однако при попытке обратиться к свойству или методу примитива, например "hello".toUpperCase(), движок выполняет неявное преобразование.
Когда вы пишете "hello".toUpperCase(), происходит следующее:
new String("hello").toUpperCase берётся из String.prototype и вызывается с этим объектом как this.То же самое происходит с числами и булевыми значениями через Number и Boolean. Для null и undefined обёрток нет, поэтому обращение к их свойствам вызывает ошибку.
const s = "hello";
console.log(s.toUpperCase()); // HELLO
// Эквивалентно:
const tmp = new String(s);
console.log(tmp.toUpperCase());
// tmp уничтожается, s остаётся примитивом
console.log(typeof s); // "string"
console.log(s instanceof String); // false
// Можно расширять прототип обёртки:
String.prototype.shout = function () {
return this.toUpperCase() + "!";
};
console.log("hi".shout()); // HI!
s.foo = 1 не сохранится, потому что временный объект сразу уничтожается.new String("a") === "a" даёт false, так как это объект и примитив.Итог: автоупаковка позволяет писать "text".length и вызывать методы у примитивов, не создавая объекты вручную. Понимание этого механизма важно для отладки неожиданного поведения, связанного с типами и прототипами.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию