자바스크립트는 원시값들을 객체처럼 다루는 것을 허용한다.

원시값에서도 객체에서처럼 메서드를 호출할 수 있게 된다.

원시값과 객체는 다음과 같은 차이점이 존재한다.

객체의 장점 중 하나는 함수를 프로퍼티로 저장할 수 있다는 점이다.

자바스크립트는 날짜, 오류, HTML 요소 등을 다룰 수 있게 해 주는 다양한 내장 객체를 제공한다. 이 객체들은 고유한 프로퍼티와 메서드를 가진다.

그러나 이 기능들을 사용하면 시스템 자원이 많이 소모된다는 단점이 있다.

객체는 원시값보다 무겁고, 내부 구조를 유지하기 위해 추가 자원을 사용하기 때문이다.

원시값을 객체처럼 사용하기

문자열이나 숫자와 같은 원시값을 다룰 때, 메서드를 사용하면 작업을 훨씬 수월하게 할 수 있다. 그러나 원시값은 가능한 한 빠르고 가벼워야 하기 때문에 자바스크립트 창안자는 다음과 같은 방법을 사용했다. (참고용)

  1. 원시값은 원시값 그대로 남겨 두어 단일 값 형태를 유지한다.
  2. 문자열, 숫자, 불린, 심볼의 메서드와 프로퍼티에 접근할 수 있도록 언어 차원에서 허용한다.
  3. 이를 가능하게 하기 위해, 원시값이 메서드나 프로퍼티에 접근하려 하면 추가 기능을 제공해 주는 특수한 객체, “**원시 래퍼 객체(object wrapper)**를 만들어 준다. 이 객체는 곧 삭제된다.

래퍼 객체는 원시 타입에 따라 종류가 다양하다. 각 래퍼 객체는 원시 자료형의 이름을 그대로 차용해, String, Number, Boolean, Symbol 이라고 부른다. (null 과 undefined를 제외한다.) 래퍼 객체마다 제공하는 메서드 역시 다르다.