원시 값
- 객체가 아님
- method, property가 없음
래퍼 객체(wrapper object)
(1).toString()
처럼 원시 값의 메서드를 사용하는 것처럼 코드를 짤 수 있습니다. 원시 값의 정의에서부터 메서드가 없다고 나오는데 메서드를 쓰는 건 무슨 장난일까요. 실제로는 몰래 추가적인 작업을 통해서 원시 값에서 메서드를 사용하는 것처럼 보이게 합니다.
- 원시 값
- auto-boxing: 원시 값을 wrapper object로 변환
- 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 )