늘 겸손하게

JavaScript - 암묵적 타입 변환 본문

Programming/JavaScript

JavaScript - 암묵적 타입 변환

besforyou999 2023. 7. 15. 20:04

 

암묵적 타입 변환  - Implicit coercion

 

 

자바스크립트에서는 암묵적 타입 변환이 자주 일어난다. 암묵적 타입 변환은 개발자의 의도와 상관없이 일어나므로 명시적 타입 변환만 강제하면 값의 타입을 예측하기 쉬워질 수 있으나 암묵적 타입 변환이 가독성이 더 좋은 장점이 있기 때문에 암묵적 타입 변환을 잘 이해하도록 하자.

 

암묵적 타입 변환이 발생하면 원시 타입인 문자열, 숫자, 불리언 중 하나로 타입이 자동 변환된다.

 

 

1. 문자열 타입 변환

 

 

+ 연산자는 피연산자 중 하나 이상이 문자열 타입이라면 다른 모든 피연산자를 암묵적으로 문자열로 변환한 후에 연결한다.

 

예시

let one = '1' + 5;
let two = 1 + '5';
let three = 2 + '5' + 9;

console.log(one);	// 15
console.log(two);	// 15
console.log(three);	// 259

 

 

2.  숫자 타입 변환

 

 

산술 연산자의 역할은 숫자 값을 만드는 역할이므로 피연산자들은 문맥상 숫자 타입이어야 한다. 그래서 산술 연산자의 피연산자들은 숫자 타입으로 암묵적 타입 변환된다. 이때 숫자 타입으로 변환할 수 없는 경우에 표현식의 결과는 NaN (Not a Number)이 된다.

 

예시

let result1 = 10 - '2';
let result2 = 20 - '5';
let result3 = 100 - undefined;

console.log(result1);    // 8
console.log(result2);   // 15
console.log(result3);   // NaN

 

 

3. 불리언 타입으로 변환

 

 

주로 if, for문과 같은 제어문의 조건식에서 불리언 타입으로 변환이 일어난다. 조건식은 참/거짓으로 평가되어야 하는 표현식으로 자바스크립트 엔진은 조건식의 결과를 불리언 타입으로 암묵적 타입 변환한다.

 

이때 자바스크립트 엔진은 불리언 타입이 아닌 값을 Truthy 값 (참으로 평가되는 값) 또는 Falsy 값(거짓으로 평가되는 값)으로 구분한다.

 

아래는 false로 평가되는 Falsy 값.

  • false
  • undefined
  • null
  • 0, -0
  • NaN
  • '' (빈 문자열)

그 외의 값은 모두 true로 평가되는 Truthy 값이다.

 

예시

function isFalsy(input) {
    if (!input) console.log(input + ' is falsy value');
}

isFalsy(false);         // false is falsy value
isFalsy(undefined);     // undefined is falsy value
isFalsy(null);          // null is falsy value
isFalsy(0);             // 0 is falsy value
isFalsy(NaN);           // NaN is falsy value
isFalsy('');            //  is falsy value

isFalsy(true);      	// 실행 안됨
isFalsy(100);       	// 실행 안됨
isFalsy(1);         	// 실행 안됨
isFalsy("Hello world"); // 실행 안됨