개요
자바스크립트를 사용하다 보면 객체를 비교하는 상황을 자주 마주하게 된다. 그때마다 ===와 ==를 사용하면서 혼란스러울 때가 많았다. 겉보기에는 똑같아 보이지만 두 연산자의 작동 방식이 다르기 때문이다. 특히 객체 비교에서 이 차이는 더욱 두드러지게 나타난다. 그래서 이 개념을 정리하고, 다른 개발자들과 공유하고자 한다.
===와 ==의 차이점
자바스크립트에서 ==는 느슨한 동등 비교, ===는 엄격한 동등 비교라고 부른다. 차이점은 ==는 비교할 때 데이터 타입을 자동으로 변환해 동등 여부를 판단하지만, ===는 타입 변환 없이 값과 타입이 모두 일치해야 true를 반환한다.
console.log(2 == '2'); // true, 타입 변환 발생
console.log(2 === '2'); // false, 타입이 다름
위 코드를 보면 ==는 숫자와 문자열을 비교할 때 타입을 변환해 같은 값으로 간주하지만, ===는 데이터 타입까지 고려하기 때문에 false를 반환한다.
객체 비교 시 주의할 점
객체를 비교할 때는 ==나 === 모두 기본값 비교가 아니라 참조를 비교한다. 즉, 두 객체가 메모리 상에서 동일한 참조를 가리키는지를 확인하는 것이다. 따라서 두 객체가 동일한 속성과 값을 가지고 있더라도, 별개의 객체라면 ==나 ===는 false를 반환한다.
const obj1 = { name: "Alice" };
const obj2 = { name: "Alice" };
console.log(obj1 == obj2); // false
console.log(obj1 === obj2); // false
위 예제에서 obj1과 obj2는 동일한 속성을 가지고 있지만 서로 다른 객체이기 때문에, 두 연산자 모두 false를 반환한다.
실제 코드 예시
객체 비교에서 참조가 아닌 값을 비교하려면, 객체의 속성을 직접 비교하는 방법을 사용해야 한다. 자바스크립트에서는 이 작업을 쉽게 하기 위해 JSON.stringify()를 사용할 수 있다. 이 함수는 객체를 문자열로 변환하여 객체의 속성 값 비교를 가능하게 한다.
const obj1 = { name: "Alice" };
const obj2 = { name: "Alice" };
console.log(JSON.stringify(obj1) === JSON.stringify(obj2)); // true
위 코드는 객체의 속성 값이 같다면 true를 반환하게 된다. 그러나 이 방법은 순서가 다르거나 중첩된 객체 구조에서는 다르게 동작할 수 있으므로 주의해야 한다.
정리
자바스크립트에서 ===와 ==는 서로 다른 용도로 사용되며, 특히 객체 비교 시 주의가 필요하다. 객체는 값이 아닌 참조를 비교하기 때문에, 값을 비교하고 싶다면 적절한 방법을 사용해야 한다. 결국, 언제 ===를 쓰고 언제 ==를 써야 하는지 명확히 알고 상황에 맞게 사용해야 불필요한 버그를 피할 수 있다.
'Javascript' 카테고리의 다른 글
자바스크립트의 클로저(Closure)와 스코프(Scope) 아주 쉽게 이해하기 (0) | 2024.10.05 |
---|---|
Screenlog.js 로그 쉽게 확인하기 (모바일 버전 작업) (8) | 2024.10.04 |
[JavaScript] 이벤트 버블링과 캡처링 (2) | 2024.09.26 |
제 컴퓨터에서는 되는데요??🙄 (0) | 2023.06.07 |
이벤트 루프 (0) | 2022.08.07 |
댓글