복습/프론트엔드

JavaScript - `===` 연산자란?

Blue_bull 2025. 2. 10. 20:12

📌 === 연산자는 "값과 타입"을 비교하는 연산자!

=== 연산자는 값과 타입이 모두 같아야 true를 반환함.
✅ 메모리 주소(참조)는 비교하지 않음.


1️⃣ === vs == 차이

연산자 비교 방식 예제 결과
== 값만 비교 (자동 형변환) 1 == "1" true (문자열 "1"이 숫자 1로 변환됨)
=== 값과 타입 모두 비교 1 === "1" false (숫자와 문자열은 타입이 다름)

결론: ===값과 타입이 같아야 true.


2️⃣ === 연산자는 "주소값"을 비교할까?

🚀 객체(배열, 함수 포함)는 "주소(참조값)"를 비교함!

const obj1 = { name: "Alice" };
const obj2 = { name: "Alice" };

console.log(obj1 === obj2); // ❌ false (주소값이 다름)
  • obj1obj2는 같은 내용을 가지고 있지만, 각각 다른 메모리 주소에 저장됨.
  • 따라서 === 비교 시 주소가 다르기 때문에 false가 반환됨.

객체 비교를 할 때는 JSON.stringify(obj1) === JSON.stringify(obj2)를 사용하면 내용 비교 가능!


3️⃣ 배열도 객체이므로 주소값을 비교함

const arr1 = [1, 2, 3];
const arr2 = [1, 2, 3];

console.log(arr1 === arr2); // ❌ false (다른 주소를 가짐)
console.log(arr1 == arr2);  // ❌ false (주소가 다름)
  • 배열은 객체이므로, ===값이 아니라 주소(참조값) 를 비교함.

해결 방법: 배열의 내용이 같은지 비교하려면 .toString() 또는 JSON.stringify() 사용

console.log(JSON.stringify(arr1) === JSON.stringify(arr2)); // ✅ true

🎯 최종 정리

비교 방식 === ==
기본 자료형 (숫자, 문자 등) 값 & 타입 비교 값만 비교 (자동 형변환)
객체 & 배열 메모리 주소(참조값) 비교 메모리 주소(참조값) 비교

값과 타입을 정확히 비교하려면 ===를 사용!
객체나 배열을 비교할 때는 JSON.stringify()를 사용해야 함!

📌 추가 질문 있으면 편하게 물어봐! 😊