배열과 객체는 크기가 커서, '별도의 공간'에 저장된다.
그렇다면 배열과 객체를 담고 있는 변수에는 어떤 값이 저장되어 있는가?
객체/배열이 저장되어 있는 '별도의 공간'의 주소가 저장되어 있다.
이로 인해 나타나는 문제가 있다.
const hb1 = {
name: '한별',
age: 24,
}
const hb2 = {
name: '한별',
age: 24,
}
hb1 === hb2 // false
내용이 같은 객체지만, 같은 객체인지 비교하면 false를 출력한다.
이는 두 값이 저장된 메모리 주소가 다르기 때문이다.
이를 해결하기 위해서는 JSON.stringify 함수를 이용하여 문자열로 변환해주면 된다.
JSON.stringify(hb1) === JSON.stringify(hb2) // true
근데 key의 순서가 일정하지 않을 때는 이 방법을 사용할 수 없다.
이 경우에는 key를 기준으로 정렬한 객체를 만들고, 이를 문자열로 변환하여 비교해야 한다.
const hb3 = {
age: 24,
name: '한별'
}
const hb4 = {
name: '한별',
age: 24,
}
JSON.stringify(hb3) === JSON.stringify(hb4) // false
let sort_hb3 = Object.keys(one).sort().reduce((obj, key) => (obj[key] = one[key], obj), {});
let sort_hb4 = Object.keys(two).sort().reduce((obj, key) => (obj[key] = two[key], obj), {});
JSON.stringify(sort_hb3) === JSON.stringify(sort_hb4) // true
배열도 마찬가지겠죠 ^^