이 장 초반에서 숫자와 문자열, 불리언에는 각각 대응하는 객체 타입 Number, String, Boolean이 있다고 언급했습니다.
이들 객체에는 두 가지 목적이 있습니다.
- 하나는 Number.INFINITY 같은 특별한 값을 저장하는 것이고,
- 다른 하나는 함수 형태로 기능을 제공하는 것입니다.
다음을 보십시오.
const s = "hello";
s.toUpperCase(); // "HELLO"
이 예제의 s는 마치 객체처럼, 즉 함수 프로퍼티를 가진 것처럼 보입니다.
하지만 우리는 s가 분명 원시 문자열 타입임을 알고 있습니다.
어떻게 된 걸까요?
자바스크립트는 일시적인 String 객체를 만든 겁니다.
이 임시 객체에 toUpperCase 함수가 들어있습니다.
자바스크립트는 함수를 호출하는 즉시 임시 객체를 파괴합니다.
객체가 임시로 만들어진다는 사실은 다음과 같이 문자열 프로퍼티를 할당해 보면 알 수 있습니다.
const s = "hello";
s.rating = 3; // 에러가 없습니다. 성공일까요?
s.rating; // undefined
이 예제는 마치 문자열 s에 프로퍼티를 할당하는 것처럼 보입니다.
사실은 일시적인 String 객체에 프로퍼티를 할당한 겁니다.
임시 객체는 즉시 파괴되므로 s.rating은 undefined 입니다.
이런 동작은 전혀 드러나지 않고 사실 생각할 필요도 거의 없지만,
자바스크립트가 이면에서 무슨 일을 하는지 알아 두면 도움이 될 수 있습니다.