-
[JAVASCRIPT-모던자바스크립트] 객체를 원시형으로 변환하기Javascript& React study 2021. 11. 14. 19:01728x90반응형SMALL
obj1 + obj2처럼 객체끼리 더하는 연산을 하게 되거나 obj1-obj2처럼 객체끼리 빼는 연산을 하게 되면 어떤 일이 벌어질까? alert(obj)로 객체를 출력할때는 무슨 일이 발생될까?
이 모든 경우에 자동 형 변환이 일어나게 된다. 객체는 원시값으로 변환되며 그 후 의도한 연산이 수행된다.
형 변환 챕터에서는 객체의 형 변환은 다루지 않았지만 원시형 자료가 어떻게 문자나 숫자 그리고 논리형으로 변환이 되는지 알아보았는데 메서드와 심볼에 대한 지식을 갖추게 되었으니 본격적으로 이러한 공백을 매꾸는 것을 해보도록 하자.
- 객체는 논리 평가시 true를 반환하게 된다. 단 하나의 예외도 없다. 따라서 객체는 숫자형이나 문자형으로만 형 변환이 일어난다고 생각하면 된다.
- 숫자형으로의 형 변환은 객체끼리 빼는 연산을 할 때나 수학 관련 함수를 적용할 때 일어난다. 객체 Date끼리 차감하게 되면 (date1-date2) 두 날짜의 시간 차이가 반환이 된다 Date에 대해서는 Date 객체와 날짜에서 다룰 예정이다.
- 문자형으로의 형 변환은 대개 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'Javascript& React study' 카테고리의 다른 글
모던 자바스크립트 Deep Dive # 2 (0) 2021.11.21 모던 자바스크립트 Deep Dive # 1 (1) 2021.11.20 [JAVASCRIPT-모던자바스크립트] 심볼형5 (0) 2021.11.13 [JAVASCRIPT-모던자바스크립트] 심볼형3 (2) 2021.11.07 [JAVASCRIPT-모던자바스크립트] 심볼형2 (2) 2021.11.06