하루 기록

9-1장, 타입 변환 본문

Book/모던 자바스크립트 Deep Dive

9-1장, 타입 변환

떼굴펜 2024. 4. 19. 14:42

 자바스크립트는 동적 타입의 언어, 즉 선언이 아닌 할당에 의해 타입이 결정(타입 추론)되는 언어이다. 하지만 이러한 타입이 변경될 때가 있다. 자바스크립트 엔진이 표현식을 평가하던 중 타입이 자동 변환되기도 하고, 개발자가 의도적으로 타입을 변환하기도 하고 . 전자를 암묵적 타입 변환, 후자를 명시적 타입변환이라고 한다.

 

 

(1) 암묵적 타입 변환

var age = 10;
console.log('나는 ' + age + '살 입니다.');    // 나는 10살입니다.

 

 age는 숫자 타입이지만 문자열 연결 연산자를 사용하였다. 자바스크립트 엔진에 이를 해석하는 중 age를 문자열 타입 암묵적으로 자동 변환시킨 것이다. 이를 암묵적 타입 변환 또는 타입 강제 변환(type coercion) 이라고 한다. 

 

 숫자 타입과 같은 원시 값은 변경 불가능한 값(immutable value)이다. 어떻게 타입 변환이 되는 걸까? 

타입 변환이란 기존 원시 값을 사용해 새로운 타입의 새로운 원시 값을 생성한다. 위 예제의 경우 자바스크립트 엔진은 age 변수의 숫자 값을 바탕으로 새로운 문자열 '10'을 생성한 뒤, 표현식 '나는 ' + '10' + '살 입니다.'을 평가한다. 그리고 만들었던 새로운 문자열 '10'을 버린다. 다시 말하자면 피연산자의 값을 암묵적 타입 변환하여 새로운 타입의 값을 만들어 단 한번 사용 후 버린다.

 

 

(2) 명시적 타입 변환

 개발자가 의도적으로 타입을 변환하는 것. 다른 말로는 타입 캐스팅(type casting)이라고 한다.

 

 

2-1) 문자열 타입으로 변환

0 + ' ';              // "0"
NaN + ' ';         // "NaN"
true + ' ';          // "true"

 

 

2-2) 숫자 타입으로 변환

1 + '1';              // 2
+ true;              // 1
+ false;            // 0
+ null;              // 0
+ undefined;    // NaN
+ {};                  // NaN
+ [];                   // 0
+ [10, 20];         // NaN

 

❗ 빈 문자열(''), 빈 배열([]), null, false는 0으로, true는 1로 변환된다. 그 외에도 객체외 빈 배열이 아닌 배열, undefined는 변환되지 않아 NaN이 된다. 

 

 

2-3) 불리언 타입으로 변환

Boolean('x');       // true
Boolean('');         // false

Boolean(0);              // false
Boolean(1);              // true
Boolean(NaN);         // false
Boolean(Infinity);     // true

Boolean(null);                       // false
Boolean(undefined);             // false

Boolean({});             // true
Boolean([]);             // true

 

 

 

 

메타몽 변신!

 

 

'Book > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글

10장, 객체 리터럴  (1) 2024.04.19
9-2장, 단축 평가  (2) 2024.04.19
6장, 데이터 타입  (2) 2024.04.18
5장, 표현식과 문  (0) 2024.04.18
4장, 변수  (0) 2024.04.17