본문으로 건너뛰기

Implicit Type Casting in JavaScript

Summary

JavaScript에서 Implicit Type Casting(암시적 형 변환)은 표현식의 문맥에 따라 자동으로 데이터 타입이 변환되는 현상이다. 이 과정은 Type Coercion이라고도 하며, 개발자가 명시적으로 변환하지 않아도 JavaScript 엔진이 내부적으로 처리한다.

Details

Implicit Type Casting이란?

암시적 형 변환은 JavaScript에서 서로 다른 타입의 값을 연산할 때, 문맥에 따라 자동으로 타입을 변환하여 연산을 수행하는 동작이다. 이 과정은 예기치 못한 결과를 초래할 수 있기 때문에 주의가 필요하다.

정보

Implicit Type Casting은 명시적 변환(String(), Number() 등)과 달리, 개발자가 의도하지 않은 타입 변환이 일어날 수 있어 코드의 의도를 흐릴 수 있다.

변환의 주요 규칙

1. 숫자와 문자열

  • + 연산자는 문자열이 포함되면 문자열 연결로 동작한다.
'5' + 3; // '53'
5 + '3'; // '53'
  • -, *, /는 문자열을 숫자로 변환한다.
'5' - 3; // 2
'5' * 2; // 10
'10' / '2'; // 5

2. Boolean 변환

JavaScript에서는 다음 값을 falsy로 간주하며, 이외는 모두 truthy하다:

  • false, 0, ''(빈 문자열), null, undefined, NaN
Boolean(0); // false
Boolean('hello'); // true
노트

조건문이나 논리 연산에서 자동 형 변환이 자주 일어난다.

3. 객체와 원시값

객체가 원시값과 연산될 때, 객체는 toString() 또는 valueOf()를 통해 문자열이나 숫자로 변환된다.

[1, 2] + 3; // '1,23'
{
}
+[]; // '[object Object]'

배열이나 객체를 숫자나 문자열로 연산할 때는 의도한 결과인지 꼭 확인해야 한다.

자주 혼동되는 사례

표현식결과설명
true + 12true1으로 변환
false + 11false0으로 변환
null + 11null0으로 변환
undefined + 1NaNundefined는 숫자로 변환 불가
경고

undefinedNaN이 포함된 연산은 NaN이 되기 때문에 연산 전 체크가 필요하다.

Reference

link: External reference

author note: Related note in this repo