Откуда у примитивов взялись методы и свойства?
Этот вопрос проверяет понимание того, как JavaScript обрабатывает примитивные типы, такие как строки, числа и булевы значения, и почему они могут иметь методы, несмотря на то, что они не являются объектами.
Короткий ответ
В JavaScript примитивы, такие как строки, числа и булевы значения, временно оборачиваются в соответствующие объектные типы (String, Number, Boolean) при доступе к их методам. Эти объекты дают доступ к методам и свойствам, после чего примитив снова превращается в своё оригинальное значение.
Длинный ответ
Хотя примитивы в JavaScript, такие как числа, строки и булевы значения, не являются объектами, они ведут себя так, как будто у них есть методы и свойства. Это происходит благодаря механизму, называемому "автоматической обёрткой" (autoboxing). Когда вы вызываете метод у примитива, JavaScript автоматически создает временный объект соответствующего типа.
Например:
let str = 'hello'; console.log(str.toUpperCase()); // 'HELLO'В этом примере str является примитивной строкой, но при вызове метода toUpperCase() JavaScript за кулисами создает временный объект типа String, на котором этот метод выполняется. После завершения вызова объект уничтожается, и переменная str снова становится обычной строкой.
Этот механизм работает для всех примитивов:
- Строки оборачиваются в объекты String.
- Числа — в объекты Number.
- Булевы значения — в объекты Boolean.
Объекты-примитивы дают доступ к таким методам, как toUpperCase() для строк, toFixed() для чисел и другим методам, которые в противном случае не были бы доступны для примитивов.