2 minute read

객체를 원시형으로 변환

객체에 어떤 기능을 취할 시 자동 형 변환 나타남

  1. 논리 평가시 true 반환.

  2. 숫자형으로 형 변환은 수학 관련 함수 적용 시

  3. 문자형으로 형 변환은 객체 출력하려고 할 때

  • ToPromitive

    특수 객체 메서드

    형 반환 원하는데로 조절 가능

    형 변환 기준은 hint 라 불리는 값이 구분 기준

    hint 는 ‘목표로 하는 자료형’

    형 변환 3종류로 구분

    1. “string”

      문자열을 기대하는 연산 수행 시

    2. “number”

      수학 연산 적용하려 할 때

    3. “default”

      연산자가 기대하는 자료형이 ‘확실치 않을 때’

    Date 객체 제외한 모든 내장 객체는 hint 가 “default” 인 경우와 “number” 인 경우 동일하게 처리

  • “boolean” hint 는 없음

    모든 객체는 true 로 평가

  • JS 의 형변환

    객체가 형 변환 필요로 할 시 알고리즘에 따라 원하는 메소드 찾고 호출

    1. 객체에 objSymbol.toPrimitive 메서드 찾고 있을 시 메서드 호출

    2. 1에 해당되지 않고 hint 가 “string” 일 시 obj.toString() 이나 obj.valueOf() 호출(존재하는 메서드만 실행)

    3. 1,2 해당 안 하고 hint 가 “number” 나 “default” 일 시 obj.valueOf() 나 obj.toString()호출 (존재하는 메서드만 실행)

  • Symbol.toPrimitive

    내장 심볼

    목표로 하는 자료형 명명하는데 사용

    hint 에 따라 메서드 하나로 모든 종류의 형 변환 가능

  • toString 과 valueOf

    둘 다 심볼 생기기 전부터 존재한 ‘평범함’ 메서드

    hint 가 ‘string’ 인 경우 : toString, valueOf 순

    그 외 는 valueOf, toString 순

    반드시 원시값 반환

    객체 반환 시 그 결과 무시

  • 일반 객체의 규칙

    1. toString 은 문자열 “[object Object]” 반환

    2. valueOf 는 객체 자신 반환

    모든 형 변환 한 곳에서 처리할 시 toString 만 구현

  • 반환 타입

    Symbol.toPrimitive 의 hint, toString,valueOf 가 항상 ‘hint’에 명시된 자료형 반환하는 보장 없음

    원시값 반환은 확실.

  • 과거의 잔재

    toString 이나 valueOf 가 객체 반환해도 에러 발생 없음

    존재하지 않았던 것 처럼 동작

    ‘에러’ 라는 개념 JS에서 없었음

  • 추가 형 변환

    객체가 피연산자일 때 다음과 같은 단계 거쳐 형 변환 일어남

    1. 객체는 원시형으로 변화

    2. 변환 후 원시값이 원하는 형이 아닌 경우 또 다시 형 변환

요약

  • 객체에 어떤 기능 취할 시 자동 형 변환 나타남

  • 객체 형 변환의 기준은 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 으로 모든 변환 다룰 수 있기 떄문에 충분하며 로깅이나 디버깅 목적으로 자주 사용됨

Categories: ,

Updated: