자바스크립트에서의 타입 강제 변환 이해
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 초보자 및 중급자 개발자
- 타입 강제 변환(implicit coercion) 개념 이해가 필요한 자바스크립트 학습자
- 로ose equality(==)와 strict equality(===) 차이를 명확히 하려는 개발자
핵심 요약
- 타입 강제 변환(type coercion)은 자바스크립트가 자동으로 데이터 타입을 변환하는 과정으로,
+
,-
,==
같은 연산자에 따라 발생 - 로ose equality(==)는 타입 변환을 허용하지만, strict equality(===)는 타입과 값 모두가 동일해야 참
- Falsy 값은
false
,0
,""
,null
,undefined
,NaN
이며, 나머지는 truthy로 간주
섹션별 세부 요약
1. 타입 강제 변환의 정의
- 자바스크립트가 다른 타입을 사용하는 상황에서 자동으로 타입을 변환
- 예:
"5" + 1
→"51"
(문자열로 강제 변환),"5" - 1
→4
(숫자로 강제 변환) - 로ose equality(==) 비교 시 자동 타입 변환 발생
2. 암시적 강제 변환(implicit coercion)
- 연산자에 따라 자동 타입 변환
"2" * 3
→6
(문자열"2"
→ 숫자2
)true + 1
→2
(booleantrue
→ 숫자1
)- 내부 규칙(Abstract Operations)에 따라 연산자 또는 맥락에 따라 변환
3. 명시적 강제 변환(explicit coercion)
Number()
,String()
,Boolean()
함수를 사용하여 수동으로 타입 변환Number("5")
→5
String(123)
→"123"
4. 문자열, 숫자, 불리언 타입별 강제 변환
- + 연산자 사용 시 문자열로 강제 변환
"Age: " + 30
→"Age: 30"
true + " days"
→"true days"
- 수학 연산자(-, /) 및 비교 연산자(<, >, ==) 사용 시 숫자로 강제 변환
"10" - 3
→7
true * 2
→2
null + 1
→1
5. 불리언 타입 강제 변환
- 논리 표현식(if, while, for 등)에서 사용
Boolean("")
→false
Boolean([])
→true
6. Falsy/Truthy 값
- Falsy 값:
false
,0
,""
,null
,undefined
,NaN
- Truthy 값: 모든 나머지 (예:
[]
,{}
,"false"
,"0"
)
7. == vs === 비교 연산자
1 == "1"
→true
(타입 강제 변환)1 === "1"
→false
(타입과 값 모두 동일해야 참)- 배열/객체 비교 시 주의:
[] == false
→true
8. 타입 강제 변환의 장단점
- 장점:
- 간결한 코드 작성 가능
- 간단한 논리에서 유용
- 단점:
- 예기치 못한 버그 발생 가능성
- 초보자에게 디버깅 어려움
결론
===
연산자 사용을 권장하여 타입 강제 변환을 피하고,Number()
,String()
,Boolean()
함수를 사용해 명시적 변환을 적용- Falsy 값(예:
0
,""
)은 조건문에서 주의하며,=== null
또는=== undefined
를 사용 - 객체 비교 시 참조(Reference)를 기준으로 하므로,
{} == {}
→false
주의