이 글은 '이웅모'님의 '모던 자바스크립트 Deep Dive' 책을 통해 공부한 내용을 정리한 글입니다. 저작권 보호를 위해 책의 내용은 요약되었습니다.
자바스크립트 객체는 크게 3가지로 분류할 수 있다.
자바스크립트는 Object, String, Number 등 40여 개의 표준 빌트인 객체를 제공한다. 표준 빌트인 객체 중 String, Number, Boolean, Function, Array, Date는 생성자 함수로 호출하여 인스턴스를 생성할 수 있다.
const objStr = new String("hello"); // String {"hello"}
console.log(Object.getPrototypeof(objStr) === String.prototype); // true
위 코드에서도 확인할 수 있듯이 표준 빌트인 객체의 prototype 프로퍼티에 바인딩 되어 있는 객체를 통해 다양한 기능의 프로토타입 메서드와 정적 메서드를 사용할 수 있다.
const str = "apple";
console.log(str.length); // 5
위 str 변수는 원시값을 할당받았다. 원시값은 객체가 아니므로 프로퍼티나 메서드를 가질 수 없는데도 위 코드는 정상적으로 동작한다. 이는 자바스크립트 엔진이 마침표 표기법을 인식하여 원시값을 연관된 객체로 임시변환 해주기 때문이다. 즉, 원시값에 객체처럼 접근하면 생성되는 임시 객체를 래퍼 객체라 한다.
그리고 위 변수 str에 할당된 문자열 "apple"은 String 생성자 함수의 인스턴스로 임시로 생성된 래퍼 객체의 [[StringData]] 내부 슬롯에 할당된다. 그리고 래퍼 객체의 처리가 종료되면 식별자가 [[StringData]] 내부 슬롯에 할당된 원시값을 가리키도록 되돌리고 래퍼 객체는 가비지 컬렉션의 대상이 된다.
const n = 3.3;
// 래퍼 객체로 변환
console.log(n.toFixed()); // 3
// 이후 원시값으로 되돌림
console.log(typeof n, n); // number 3.3