객체를 원시형으로 변환
객체를 원시형으로 변환
객체에 어떤 기능을 취할 시 자동 형 변환 나타남
-
논리 평가시 true 반환.
-
숫자형으로 형 변환은 수학 관련 함수 적용 시
-
문자형으로 형 변환은 객체 출력하려고 할 때
-
ToPromitive
특수 객체 메서드
형 반환 원하는데로 조절 가능
형 변환 기준은 hint 라 불리는 값이 구분 기준
hint 는 ‘목표로 하는 자료형’
형 변환 3종류로 구분
-
“string”
문자열을 기대하는 연산 수행 시
-
“number”
수학 연산 적용하려 할 때
-
“default”
연산자가 기대하는 자료형이 ‘확실치 않을 때’
Date 객체 제외한 모든 내장 객체는 hint 가 “default” 인 경우와 “number” 인 경우 동일하게 처리
-
-
“boolean” hint 는 없음
모든 객체는 true 로 평가
-
JS 의 형변환
객체가 형 변환 필요로 할 시 알고리즘에 따라 원하는 메소드 찾고 호출
-
객체에 objSymbol.toPrimitive 메서드 찾고 있을 시 메서드 호출
-
1에 해당되지 않고 hint 가 “string” 일 시 obj.toString() 이나 obj.valueOf() 호출(존재하는 메서드만 실행)
-
1,2 해당 안 하고 hint 가 “number” 나 “default” 일 시 obj.valueOf() 나 obj.toString()호출 (존재하는 메서드만 실행)
-
-
Symbol.toPrimitive
내장 심볼
목표로 하는 자료형 명명하는데 사용
hint 에 따라 메서드 하나로 모든 종류의 형 변환 가능
-
toString 과 valueOf
둘 다 심볼 생기기 전부터 존재한 ‘평범함’ 메서드
hint 가 ‘string’ 인 경우 : toString, valueOf 순
그 외 는 valueOf, toString 순
반드시 원시값 반환
객체 반환 시 그 결과 무시
-
일반 객체의 규칙
-
toString 은 문자열 “[object Object]” 반환
-
valueOf 는 객체 자신 반환
모든 형 변환 한 곳에서 처리할 시 toString 만 구현
-
-
반환 타입
Symbol.toPrimitive 의 hint, toString,valueOf 가 항상 ‘hint’에 명시된 자료형 반환하는 보장 없음
원시값 반환은 확실.
-
과거의 잔재
toString 이나 valueOf 가 객체 반환해도 에러 발생 없음
존재하지 않았던 것 처럼 동작
‘에러’ 라는 개념 JS에서 없었음
-
추가 형 변환
객체가 피연산자일 때 다음과 같은 단계 거쳐 형 변환 일어남
-
객체는 원시형으로 변화
-
변환 후 원시값이 원하는 형이 아닌 경우 또 다시 형 변환
-
요약
-
객체에 어떤 기능 취할 시 자동 형 변환 나타남
-
객체 형 변환의 기준은 hint 가 기준
-
hint 는 ‘목표로 하는 자료형’
-
형 변환은 3종류로 구분 (string, number, default)
-
string 은 문자열을 필요로 하는 연산
-
number 는 수학 연산
-
default 는 연산자가 기대하는 피연산자를 ‘확신할 수 없을 때’
-
Date 객체 제외한 모든 내장 객체는 hint 가 “default”인 경우와 “number” 인 경우 동일하게 처리
-
모든 객체는 논리연산에서 true로 평가
-
[Symbol.toPrimitive] 는 내장심볼로 hint 에 따라 메서드 하나로 모든 종류의 형 변환 가능
-
[Symbol.toPrimitive] 는 hint가 string 일 때, hint가 number 나 default 일 떄 순으로 진행
-
[Symbol.toPrimitive] 없을 시 객체 내의 toString() 이나 valueOf() 호출
-
hint 가 ‘string’ 일 경우 toString -> valueOf 순이고 그 외에는 valueOf -> toString 순.
-
toStirng, valueOf 는 원시값 반환해야 하며 객체 반환 시 결과 무시.(없언던 메서드)
-
toString 은 문자열 “[obejct, Object]” qksghks
-
valueOf 는 객체 자신 반환 (hintr가 number나 default 인 경우로 적용하고 return 값으로 원시값)
-
반환시 hint에 명시된 자료형 반환하는 보장은 없음
-
객체는 원시형으로 변환 후 원하는 원시값 아닐 시 또 다시 변형됨
-
toString 으로 모든 변환 다룰 수 있기 떄문에 충분하며 로깅이나 디버깅 목적으로 자주 사용됨