본문 바로가기

카테고리 없음

원시 값과 래퍼 객체

나무 울타리 위의 참새. Unsplash 에 Jayden Wilhelm 님이 올림.

원시 값

  • 객체가 아님
  • method, property가 없음

래퍼 객체(wrapper object)

(1).toString() 처럼 원시 값의 메서드를 사용하는 것처럼 코드를 짤 수 있습니다. 원시 값의 정의에서부터 메서드가 없다고 나오는데 메서드를 쓰는 건 무슨 장난일까요. 실제로는 몰래 추가적인 작업을 통해서 원시 값에서 메서드를 사용하는 것처럼 보이게 합니다.

  1. 원시 값
  2. auto-boxing: 원시 값을 wrapper object로 변환
  3. wrapper object의 메서드를 호출

래퍼 객체는 원시값일까?

원시 값이 wrapper object로 바뀔 때를 볼 수는 없지만, ECMAScript 에서 각 원시 값의 객체 형태에 대한 설명을 통해 그 object를 얻는 법을 알 수는 있습니다. 부울 대수를 예시로 살펴볼게요.

- creates and initializes a new Boolean object when called as a constructor.
- performs a type conversion when called as a function rather than as a constructor.

 

constructor(new를 사용한)로 썼다면 Boolean object가, 그냥 함수처럼 썼다면 type conversion의 결과물이 나온다고 적혀 있습니다. 결론부터 말하면 이 둘은 다릅니다.

 

> a = true
true
> b = Boolean(true)
true
> c = new Boolean(true)
[Boolean: true]
> a === b
true
> a === c
false
> b === c
false

 

위는 cmd에서 node를 통해 확인한 결과입니다. 타입 변환의 결과물은 원시값이고, 생성자의 결과물은 객체입니다.

참고 자료

Primitive - MDN Web Docs
20.3.1 The Boolean Constructor
20.3.1.1 Boolean ( value )
7.1.2 ToBoolean ( argument )