Как у строки в JavaScript появляются методы

В JavaScript примитивы (string, number, boolean) автоматически оборачиваются в объекты при обращении к их методам. Это называется боксинг.

Когда пишешь str.toUpperCase(), движок: 🔘 Создает временный объект new String(str) 🔘 Вызывает String.prototype.toUpperCase.call(tempString) 🔘 Возвращает результат 🔘 Уничтожает временный объект

Методы находятся в String.prototype, а боксинг происходит автоматически и невидимо. Поэтому typeof показывает исходный тип примитива, а не «object».

Важно: самого понятия «боксинг/анбоксинг» в спецификации ECMAScript нет - это просто абстракция для понимания. В реальности движок использует абстрактные операции ToObject, ToString, ToPrimitive.

Круто: метод toUpperCase является «intentionally generic» - он работает с любыми объектами, которые можно преобразовать в строку. #javascript