[JavaScript] 객체 메서드와 객체 비교

Object.key()

객체의 키를 모두 가져와 배열로 반환

let person = {
  name: "Kim",
  age: 30,
};

let keys = Object.keys(person);
console.log(keys);  // ['name', 'age']

 

 

Object.values()

객체의 값들을 모두 가져와 배열로 반환

let values = Object.values(person);
console.log(values);  // ['Kim', 30]

 

 

 

Object.entries()

객체의 key-value를 하나의 배열로 묶어 만든 배열을 반환 (2차원 배열)

let entries = Object.entries(person);
console.log(entries);  // [['name', 'Kim'], ['age', 30]]

 

 

Object.assign()

객체를 복사하여 반환

let newPerson = {};
Object.assign(newPerson, person);
console.log(newPerson);  // { name: 'Kim', age: 30 }

 

assign에 인자를 하나 더 넘기면 일부 속성만 변경하여 복사할 수 있다!

 

let newPerson = {};
Object.assign(newPerson, person, { age: 50 });
console.log(newPerson);  // { name: 'Kim', age: 50 }

 

 

객체 비교

let str1 = "aaa";
let str2 = "aaa";

console.log(str1 === str2);  // true

let person1 = {
  name: 'Kim',
  age: 30,
};

let person2 = {
  name: 'Kim',
  age: 30,
};

console.log(person1 === person2);  // false

객체를 === 연산자로 비교했을 때 내부의 key-value가 같더라도 false를 반환

내부의 값을 비교하는 것이 아니라, person1과 person2의 값이 저장된 주소를 비교하는 것이 되기때문!

 

그럼 내부 값이 일치하는지 확인하고 싶으면 어떻게 해야할까?

 

JSON.stringify()

객체 내부의 key-value를 문자열로 변경한 값을 받을 수 있음

console.log(JSON.stringify(person1) === JSON.stringify(person2));  // true!

 

 

 

객체 병합 (스프레드 오퍼레이터)

두개 이상의 객체가 있을 때 이 객체들의 key-value를 모아 하나의 객체를 만들고싶을 때 스프레드 오퍼레이터를 사용할 수 있다.

let personData1 = {
  name: 'Kim',
};

let personData2 = {
  age: 30,
};

let person = { ...personData1, ...personData2 };
console.log(person);  // { name: 'Kim', age: 30 }