본문 바로가기

개발언어/JavaScript

자바스크립트의 암묵적 타입변환

0.개요

자바스크립트 엔진은 표현식을 평가할 때 개발자의 의도와는 상관없이 코드의 문맥을 고려해 암묵적으로 데이터 타입을 강제 변환( 암묵적 타입 변환) 할 때가 있다. 

// 피연산자가 모두 문자열 타입이어야 하는 문맥
let a ='10' + 2;
console.log(a);			// 102

// 피연산자가 모두 숫자 타입이어야 하는 문맥
let b = 5 * '10';
console.log(b);			// 50

// 피연산자 또는 표현식이 불리언 타입이어야 하는 문맥
let c = !0;
console.log(c);			//false	

if(1){ }				//반복문 수행

이처럼 표현식을 평가할 때도 코드의 문맥에 부합하지 않는 다양한 상황이 발생할 수 있다.

자바스크립트는 가급적 에러를 발생시키지 않도록 암묵적 타입변환을 통해 표현식을 평가한다.

- 암묵적 타입 변환이 발생하면 문자열, 숫자, 불리언과 같은 원시 타입 중 하나로 타입을 자동 변환한다.

 

1. 문자열 타입으로 변환

문자열 연산자의 역할은 문자열 값을 만드는 것이다. 따라서 문자열 연결 연산자의 모든 피연산자는 코드의 문맥상 모두 문자열 타입이어야 한다.

자바스크립트 엔진은 문자열 연결 연산자 표현식을 평가하기 위해 문자열 연결 연산자의 피연산자 중에서 문자열 타입이 아닌 피연산자를 문자열 타입으로 암묵적으로 타입 변환한다.

let a = 1 + '2' ;
console.log(a);         //12

템플릿 리터럴의 표현식으로 결과를 문자열타입으로 암묵적 타입 변환 할 수 있다.

`1 + 1 = ${ 1 + 1} `	// "1 + 1 = 2'

 

2. 숫자 타입으로 변환

자바스크립트 엔진은 산술 연산자 표현식을 평가하기 위해 산술 연산자의 피연산자 중에서 숫자 타입이 아닌 피연산자를 숫자 타입으로 암묵적 타입 변환한다.  이때 피연산자를 숫자타입으로 변환할 수 없는 경우는 산술연산을 수행할 수 없으므로 표현식의 평가결과는 NaN이 된다.

let a = 2 - '1';
console.log(a);         //1

let b = 1 * '10';
console.log(b);         //10

let c = 1 / 'one';
console.log(c);         //NaN

또한 피연산자를 숫자타입으로 반환하여 논리연산을 수행하기도 한다.

if( '1' > 0 ){
		console.log('1 > 0 비교연산자 수행 true')
	}

빈문자열(' '), 빈 배열([ ]), null,

false 는 0으로

true는 1로 변환한다.

객체와 빈 배열이 아닌 배열, undefined는 변환되지 않아 NaN이 된다는것을 주의

 

3.불리언(boolean)타입으로 변환

if문이나 for문과 같은 제어문 또는 삼항 조건 연산자의 조건식은 불리언 값, 즉 논리적 참/ 거짓으로 평가되어야하는 표현식이다. 자바스크립트 엔진은 조건식의 평가 결과를 불리언 타입으로 암묵적으로 형변환해준다.