[javascript] Object to primitive conversion
참고
요약
원시값을 기대하는 내장 함수나 연산자를 사용할 때 객체-원시형으로의 형 변환이 자동으로 일어납니다.
객체-원시형으로의 형 변환은 hint
를 기준으로 세 종류로 구분할 수 있습니다.
string
(alert
같이 문자열을 필요로 하는 연산)number
(수학 연산)default
(드물게 발생함) 연산자별로 어떤hint
가 적용되는지는 명세서에서 찾아볼 수 있습니다. 연산자가 기대하는 피연산자를 '확신할 수 없을 때’에는hint
가default
가 됩니다. 이런 경우는 아주 드물게 발생합니다. 내장 객체는 대개hint
가default
일 때와number
일 때를 동일하게 처리합니다. 따라서 실무에선hint
가default
인 경우와number
인 경우를 합쳐서 처리하는 경우가 많습니다.
객체-원시형 변환엔 다음 알고리즘이 적용됩니다.
- 객체에
obj[Symbol.toPrimitive](hint)
메서드가 있는지 찾고, 있다면 호출합니다. - 1에 해당하지 않고
hint
가string
이라면,obj.toString()
이나obj.valueOf()
를 호출합니다. - 1과 2에 해당하지 않고,
hint
가number
나default
라면obj.valueOf()
나obj.toString()
을 호출합니다.
obj.toString()
만 사용해도 '모든 변환’을 다 다룰 수 있기 때문에, 실무에선 obj.toString()
만 구현해도 충분한 경우가 많습니다. 반환 값도 ‘사람이 읽고 이해할 수 있는’ 형식이기 때문에 실용성 측면에서 다른 메서드에 뒤처지지 않습니다. obj.toString()
은 로깅이나 디버깅 목적으로도 자주 사용됩니다.