September 10, 2021
obj1 + obj2
처럼 객체끼리 더하는 연산을 하거나, obj1 - obj2
처럼 객체끼리 빼는 연산을 하면 어떤 일이 일어날까요? alert(obj)
로 객체를 출력할 때는 무슨 일이 발생할까요?
이 모든 경우에 자동 형 변환이 일어납니다. 객체는 원시값으로 변환되고, 그 후 의도한 연산이 수행됩니다.
형 변환 챕터에선 객체의 형 변환은 다루지 않았습니다. 원시형 자료가 어떻게 문자, 숫자, 논리형으로 변환되는지만 알아보았죠. 이젠 메서드와 심볼에 대한 지식을 갖추었으니 본격적으로 이 공백을 메꿔봅시다.
true
를 반환합니다. 단 하나의 예외도 없죠. 따라서 객체는 숫자형이나 문자형으로만 형 변환이 일어난다고 생각하시면 됩니다.Date
끼리 차감하면(date1 - date2
) 두 날짜의 시간 차이가 반환됩니다. Date
에 대해선 Date 객체와 날짜에서 다룰 예정입니다.alert(obj)
같이 객체를 출력하려고 할 때 일어납니다.중요한 내용인가..?
원시값을 기대하는 내장 함수나 연산자를 사용할 때 객체-원시형으로의 형 변환이 자동으로 일어납니다.
객체-원시형으로의 형 변환은 hint를 기준으로 세 종류로 구분할 수 있습니다.
"string"
(alert
같이 문자열을 필요로 하는 연산)"number"
(수학 연산)"default"
(드물게 발생함)연산자별로 어떤 hint가 적용되는지는 명세서에서 찾아볼 수 있습니다. 연산자가 기대하는 피연산자를 '확신할 수 없을 때’에는 hint가 "default"
가 됩니다. 이런 경우는 아주 드물게 발생합니다. 내장 객체는 대개 hint가 "default"
일 때와 "number"
일 때를 동일하게 처리합니다. 따라서 실무에선 hint가 "default"
인 경우와 "number"
인 경우를 합쳐서 처리하는 경우가 많습니다.
객체-원시형 변환엔 다음 알고리즘이 적용됩니다.
obj[Symbol.toPrimitive](hint)
메서드가 있는지 찾고, 있다면 호출합니다."string"
이라면,
obj.toString()
이나 obj.valueOf()
를 호출합니다.