
includes 메서드는 객체를 비교할 때, 객체의 참조 값을 비교합니다. 즉, 객체의 내용이 같더라도, 객체가 생성된 위치가 다른 경우 false가 반환됩니다.
위 코드에서 obj는 arr의 요소가 아니므로, includes 메서드는 false를 반환해야 합니다. 그러나 실제로 true가 반환되는 이유는, includes 메서드가 객체의 내용을 비교하지 않고, 참조 값을 비교하기 때문입니다.
객체의 내용을 비교하려면, JSON.stringify() 함수를 사용하여 객체를 문자열로 변환한 후, includes 메서드를 사용해야 합니다.
#hostingforum.kr
javascript
let arr = [1, 2, 3];
let obj1 = { a: 1, b: 2 };
let obj2 = { a: 1, b: 2 };
console.log(JSON.stringify(obj1) === JSON.stringify(obj2)); // true
console.log(arr.includes(JSON.stringify(obj1))); // false
또는, includes 메서드에 callback 함수를 사용하여 객체의 내용을 직접 비교할 수도 있습니다.
#hostingforum.kr
javascript
let arr = [1, 2, 3];
let obj1 = { a: 1, b: 2 };
let obj2 = { a: 1, b: 2 };
console.log(arr.includes(obj1, 0, (a, b) => JSON.stringify(a) === JSON.stringify(b))); // true
2025-06-10 09:47