JavaScript에는 두 값이 서로 다른지를 확인하는 두 가지 불일치 연산자가 있습니다. 바로 !=(느슨한 불일치)와 !==(엄격한 불일치)입니다. 두 연산자는 이름은 비슷하지만 동작 방식에서 중요한 차이가 있으며, 이를 제대로 이해하지 못하면 예상치 못한 버그를 만들 수 있습니다.
'!=' 연산자란?
!= 연산자는 두 값이 다른지를 비교할 때 타입 검사를 하지 않습니다. 비교하기 전에 자바스크립트 엔진이 두 피연산자의 데이터 타입을 자동으로 하나로 변환(타입 강제 변환, type coercion)한 후 값을 비교합니다.
예를 들어 숫자 1과 문자열 '1'을 비교하면, 문자열이 숫자로 변환된 뒤 비교되기 때문에 두 값은 같다고 판단됩니다. 따라서 1 != '1'의 결과는 false입니다.
'!==' 연산자란?
!== 연산자는 두 값이 다른지를 비교할 때 타입 검사까지 함께 수행합니다. 데이터 타입을 변환하지 않고, 값과 타입이 모두 일치해야 같은 것으로 판단합니다.
따라서 숫자 1과 문자열 '1'은 값은 같지만 타입이 다르기 때문에 1 !== '1'의 결과는 true가 됩니다.
비교 결과 한눈에 보기
| 표현식 | 타입 변환 여부 | 결과 |
|---|---|---|
1 != '1' | 변환함 (느슨한 비교) | false |
1 !== '1' | 변환하지 않음 (엄격한 비교) | true |
예제 코드
다음 예제는 !=와 !== 연산자의 실제 사용법과 결과 차이를 보여줍니다.
<!DOCTYPE html>
<html>
<head>
<title>Operator Example</title>
</head>
<body>
<script language="JavaScript">
console.log(" 1 != '1' " + (1 != '1'));
console.log(" 1 !== '1' " + (1 !== '1'));
</script>
</body>
</html>
실행 결과
1 != '1' false 1 !== '1' true
정리 및 개발 팁
!=는 타입을 자동으로 변환하여 비교하고, !==는 타입까지 엄격하게 검사합니다. 타입 강제 변환으로 인해 의도하지 않은 결과가 나올 수 있으므로, 실무에서는 대부분 !==(그리고 짝이 되는 ===)를 사용하는 것이 권장됩니다. 이는 코드의 예측 가능성을 높이고 잠재적인 버그를 줄여주는 좋은 습관입니다.