ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVASCRIPT-모던자바스크립트] 객체를 원시형으로 변환하기
    Javascript& React study 2021. 11. 14. 19:01
    728x90
    반응형
    SMALL

    obj1 + obj2처럼 객체끼리 더하는 연산을 하게 되거나 obj1-obj2처럼 객체끼리 빼는 연산을 하게 되면 어떤 일이 벌어질까? alert(obj)로 객체를 출력할때는 무슨 일이 발생될까?

    이 모든 경우에 자동 형 변환이 일어나게 된다. 객체는 원시값으로 변환되며 그 후 의도한 연산이 수행된다.

    형 변환 챕터에서는 객체의 형 변환은 다루지 않았지만 원시형 자료가 어떻게 문자나 숫자 그리고 논리형으로 변환이 되는지 알아보았는데 메서드와 심볼에 대한 지식을 갖추게 되었으니 본격적으로 이러한 공백을 매꾸는 것을 해보도록 하자.

    1. 객체는 논리 평가시 true를 반환하게 된다. 단 하나의 예외도 없다. 따라서 객체는 숫자형이나 문자형으로만 형 변환이 일어난다고 생각하면 된다.
    2. 숫자형으로의 형 변환은 객체끼리 빼는 연산을 할 때나 수학 관련 함수를 적용할 때 일어난다. 객체 Date끼리 차감하게 되면 (date1-date2) 두 날짜의 시간 차이가 반환이 된다 Date에 대해서는 Date 객체와 날짜에서 다룰 예정이다.
    3. 문자형으로의 형 변환은 대개 alert(obj)같이 객체를 출력하라고 할 때 일어난다.

    ToPrimitive

    특수 객체 메서드를 사용하게 되면 숫자형이나 문자형으로의 형 변환을 원하는 대로 조절할 수 있다.

    객체 형 변환은 세 종류로 구분되는데 'hint'라 불리는 값이 구분 기준이 된다. 'hint'가 무엇인지는 명세서에 자세히 설명이 되어있는데 목표로 하는 자료형이라 이해하면 된다.

    "string"

    alert 함수같이 문자열을 기대하는 연산을 수행할 때에는 (객체-문자형 변환), hint가 string이 된다.

    // 객체를 출력하려고 함
    alert(obj);
    
    // 객체를 프로퍼티 키로 사용하고 있음
    anotherObj[obj] = 123;

    "number"

    수학 연산을 적용하려 할 때 (객체- 숫자형 변환), hint는 number가 됩니다.

    // 명시적 형 변환
    let num = Number(obj);
    
    // (이항 덧셈 연산을 제외한) 수학 연산
    let n = +obj; // 단항 덧셈 연산
    let delta = date1 - date2;
    
    // 크고 작음 비교하기 
    let greater = user1 > user2;

    "default"

    연산자가 기대하는 자료형이 확실치 않을 때 hint는 default가 된다. 아주 드물게 발생한다.

    이항 덧셈 연산자 +는 피연산자의 자료형에 따라 문자열을 합치는 연산을 할 수도 있고 숫자를 더해주는 연산을 할 수도 있다. 따라서 +의 인수가 hint가 default가 된다.

    동등 연산자 ==를 사용해 객체-문자형,객체-숫자형, 객체- 심볼형끼리 비교할 때도 객체를 어떤 자료형으로 바꿔야 할지 확신이 안 서므로 hint는 default가 된다.

    728x90
    반응형
    LIST

    댓글

Designed by Tistory.