JavaScript에서 문자열과 부울(Boolean)을 비교하는 방법
JavaScript에서는 동등 연산자(==)를 사용해 문자열과 부울 값을 비교할 수 있습니다. 이때 JavaScript는 서로 다른 타입을 비교하기 위해 자동 형 변환(type coercion)을 수행하는데, 그 결과가 직관적이지 않아 많은 개발자를 혼란스럽게 만듭니다. 아래 예제를 통해 어떤 결과가 나오는지 하나씩 살펴보겠습니다.
true를 반환하는 경우
false == "0"; // true
true == "1"; // true
false == ""; // true
부울 값과 문자열을 ==로 비교하면, 먼저 부울 값이 숫자로 변환됩니다(true는 1, false는 0). 이후 문자열 역시 숫자로 변환된 뒤 비교가 진행됩니다.
false == "0"→ false는 0이 되고, "0"도 숫자 0이 되므로 truetrue == "1"→ true는 1이 되고, "1"은 숫자 1이 되므로 truefalse == ""→ 빈 문자열 ""는 숫자 0으로 변환되므로 true
false를 반환하는 경우
false == "false"; // false
true == "true"; // false
문자열 "false"나 "true"는 유효한 숫자가 아니기 때문에 숫자로 변환하면 NaN(Not a Number)이 됩니다. NaN은 어떤 값과도 같지 않으므로 비교 결과는 항상 false입니다.
엄격한 비교(===)와 문자열 변환 활용하기
일치 연산자(===)는 형 변환 없이 값과 타입을 모두 비교합니다. 따라서 부울과 문자열처럼 타입이 다른 값을 비교하면 내용이 같아도 항상 false가 반환됩니다.
var data = true;
data === "true"; // false (타입이 다름)
String(data) === "true"; // true (문자열로 변환 후 비교)
위 예제처럼 String() 함수를 사용해 부울 값을 문자열로 명시적으로 변환한 뒤 비교하면, 의도한 대로 true를 얻을 수 있습니다.
정리
==연산자는 비교 전에 암묵적인 형 변환을 수행하므로 예상치 못한 결과가 나올 수 있습니다.- 부울 값은 숫자로(true → 1, false → 0), 문자열은 숫자로 변환된 뒤 비교됩니다.
- "true", "false" 같은 문자열은 숫자로 변환 시 NaN이 되어 항상 false를 반환합니다.
- 타입까지 엄격하게 비교하려면
===연산자를 사용하고, 필요하다면String()또는Boolean()으로 타입을 맞춘 후 비교하는 것이 가장 안전합니다.