객체는 참조자료형이다. 따라서 변수 내용을 참조해오는 주소를 값으로 갖는다.
이 주소가 동일하다면 두 객체는 하나의 주소에서 동일한 내용을 참조하기 때문에 반드시 같은 내용을 갖는다.
// obj1, obj2 비교
if(obj1 === obj2) {
// 두 객체는 같은 주소값을 갖기 때문
console.log(`${obj1}과 ${obj2}는 같은 내용입니다.`);
}
주소값이 다른 두 객체를 비교하는 경우, 객체 내부의 속성 & 속성값
이 전부 일치해야만 같은 내용이라고 할 수 있다.
Object.keys()
메소드를 통해 객체 내부의 속성
들을 조회한 뒤, 각각의 속성 & 속성값
들을 조회, 비교하여 내용의 일치 여부를 판단한다.
속성 & 속성값
을 전부 비교한다.// obj1, obj2 비교
if(obj1 !== obj2) {
const keys1 = Object.keys(obj1); // obj1 객체의 속성들을 담은 배열
const keys2 = Object.keys(obj2); // obj2 객체의 속성들을 담은 배열
// 두 keys 배열의 길이가 다르면
if(keys1.length !== keys2.length) {
// 두 객체의 속성이 일치하지 않기 때문
console.log(`${obj1}과 ${obj2}는 다른 내용입니다.`);
}
// keys 배열 중 하나의 요소 순회
for(let key of keys) {
// obj1과 obj2의 key 속성값이 다르면
if(obj1[key] !== obj2[key]) {
// obj1과 obj2의 속성값이 일치하지 않기 때문
console.log(`${obj1}과 ${obj2}는 다른 내용입니다.`);
}
}
// (keys 요소 순회 종료 후)
// obj1과 obj2의 모든 속성과 속성값이 일치하기 때문
console.log(`${obj1}과 ${obj2}는 같은 내용입니다.`);
}