출처: ChatGPT
== 연산자: 주소(참조)가 다른 경우 false를 반환합니다. 그러나 동등한 값을 가지는 경우, 자동 타입 변환을 통해 비교를 시도합니다. 타입 변환 후에도 값이 같다면 true를 반환하고, 다르다면 false를 반환할 수 있습니다.
=== 연산자: 주소(참조)가 다른 경우 false를 반환합니다. 값의 동등성을 비교하며, 타입 변환을 수행하지 않습니다. 따라서 두 피연산자가 같은 타입이면서 값도 같아야 true를 반환합니다.
예를 들어, 다음과 같은 코드를 살펴봅시다:
const obj1 = { value: 10 };
const obj2 = { value: 10 };
const obj3 = obj1;
console.log(obj1 == obj2); // false
console.log(obj1 === obj2); // false
console.log(obj1 === obj3); // true
위의 코드에서 obj1과 obj2는 값이 같지만 서로 다른 객체를 참조하고 있습니다. 따라서 obj1 == obj2와 obj1 === obj2 모두 false를 반환합니다. 반면에 obj1과 obj3은 같은 객체를 참조하고 있으므로 obj1 === obj3은 true를 반환합니다.
결론적으로, ==와 === 연산자는 객체나 배열을 비교할 때 주소(참조)까지 비교합니다. 그렇기 때문에 두 피연산자가 동일한 객체를 참조하고 있는 경우에만 true를 반환하고, 그 외에는 false를 반환합니다.