자바스크립트에서 ==(동등 연산자)와 ===(일치 연산자)는 두 피연산자를 비교할 때 사용하는 연산자입니다. 두 연산자는 비슷해 보이지만 동작 방식에 중요한 차이가 있으며, 이 차이를 이해하는 것은 버그 없는 코드를 작성하는 데 필수적입니다.
== 와 === 의 주요 차이점
| 번호 | 구분 | == (더블 equals) | === (트리플 equals) |
|---|---|---|---|
| 1 | 명칭 | 동등 연산자(Equality Operator)라고 불립니다. | 일치 연산자 / 엄격한 동등 연산자(Identity / Strict Equality Operator)라고 불립니다. |
| 2 | 비교 방식 | 비교 전 피연산자의 타입을 자동으로 변환(type coercion)합니다. | 타입 변환 없이 엄격하게(strict) 비교합니다. |
| 3 | 문법 | a == b 형태로 사용합니다. | a === b 형태로 사용합니다. |
| 4 | 동작 원리 | 먼저 두 피연산자를 같은 타입으로 변환한 후 비교를 수행합니다. 즉, 양쪽 피연산자의 타입이 동일해진 시점에 비교가 이루어지며, 이를 타입 강제 변환 비교(type coercion comparison)라고도 합니다. | 비교 전 어떠한 타입 변환도 수행하지 않으며, 두 피연산자의 타입과 값이 모두 정확히 같을 때만 true를 반환합니다. |
== vs === 예제 코드
아래 예제를 통해 두 연산자의 실제 동작 차이를 확인해 보겠습니다.
equals.js
var a = true;
var b = 1;
var c = true;
console.log(a == b); // 1을 불리언 true로 먼저 변환한 후 비교 → true
console.log(a === c); // 두 피연산자 모두 boolean 타입으로 변환 불필요, 단순 비교 → true
console.log(a === b); // 타입 변환이 수행되지 않으며, 두 피연산자의 타입이 다르므로 → false
실행 결과
true
true
false
정리 및 사용 권장 사항
==는 암묵적인 타입 변환 때문에 '1' == 1, null == undefined처럼 직관적이지 않은 결과를 만들어 낼 수 있습니다. 반면 ===는 타입과 값을 모두 검사하므로 예측 가능한 결과를 보장합니다.
따라서 대부분의 자바스크립트 스타일 가이드(예: Airbnb, ESLint 기본 규칙)에서는 의도치 않은 타입 변환으로 인한 버그를 방지하기 위해 항상 ===를 사용할 것을 권장합니다. ==는 null 또는 undefined 여부를 동시에 확인하는 등 특수한 경우에만 제한적으로 사용하는 것이 좋습니다.