자바스크립트에서 타입 변환(Type Conversion)은 매우 중요한 개념이다. 자바스크립트는 동적 타입 언어이기 때문에, 타입이 자동으로 또는 명시적으로 바뀌는 경우가 자주 발생한다.
String()
, Number()
, Boolean()
같은 함수 사용자바스크립트는 표현식의 문맥에 따라 값을 자동으로 변환한다. 가장 흔한 예는 연산자(+
, ==
, 조건문 등)에서 발생한다.
'5' + 1 // "51" → 문자열로 변환됨
'5' - 1 // 4 → 숫자로 변환됨
'5' * '2' // 10 → 숫자로 변환됨
+
연산자는 하나라도 문자열이면 전체를 문자열로 변환-
, *
, /
)는 모두 숫자 변환을 시도!!"hello" // true
!!0 // false
!! undefined // false
false
가 되는 값):값 | 의미 |
---|---|
false | 거짓 |
0 , -0 | 숫자 0 |
"" | 빈 문자열 |
null | 없음 |
undefined | 정의되지 않음 |
NaN | 숫자가 아님 |
나머지 모든 값은 true
로 간주된다.
==
) 시의 암시적 변환'5' == 5 // true (문자열 → 숫자 변환)
false == 0 // true
null == undefined // true
[] == '' // true
[] == 0 // true
[1] == 1 // true
혼란스럽기 때문에 실제 개발에서는 항상
===
사용 권장!
명시적 타입 변환은 개발자가 의도적으로 타입을 바꾸는 것이다.
String(123) // "123"
(123).toString() // "123"
Number("42") // 42
parseInt("42px") // 42
parseFloat("3.14") // 3.14
+true // 1
+"123.45" // 123.45
Boolean(0) // false
Boolean("hello") // true
!!값
패턴도 많이 사용된다:!!"hello"
→true
표현식 | 결과 | 이유 |
---|---|---|
null + 1 | 1 | null → 0 으로 변환 |
undefined + 1 | NaN | undefined → NaN 변환 |
true + false | 1 | true → 1 , false → 0 |
[] + {} | "[object Object]" | 배열이 문자열로 변환됨 |
{} + [] | 0 또는 "[object Object]" | 파싱 방식에 따라 다름 |
변환 종류 | 암시적 예시 | 명시적 예시 |
---|---|---|
문자열 변환 | '3' + 1 → '31' | String(123) |
숫자 변환 | '5' * 2 → 10 | Number("42") |
불리언 변환 | !!"hello" → true | Boolean(null) |
Number()
, 문자열 변환엔 String()
또는 .toString()
, 불리언은 !!
또는 Boolean()
===
(엄격한 동등) 사용 → 예기치 않은 암시적 변환 방지undefined
와 null
비교는 조심 (예: undefined == null
은 true
, ===
은 false
)