객체
key - value pair
하나의 변수에 여러개의 값을 넣을 수 있다.
1-1. 기본적인 객체 선언 방법
let person ={
name: "홍길동",
age: 30,
gender: "남자"
};
1-2. 생성자 함수를 이용한 객체 선언 방법
function Person(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
let person1 = new Person("홍길동", 30, "남자");
let person2 = new Person("홍길순", 20, "여자");
// this 키워드는 뒤에서 배운다. 지금은 이런게 있다는것만 알아두자
객체명.키
console.log("1", person.name); //실행 결과: 1 홍길동
console.log("2", person.age); //실행 결과: 2 30
console.log("3", person.gender); //실행 결과: 3 남자
3-1. Object.key(): key를 가져오는 메소드
let keys = Object.keys(person); // 객체 person에 저장된 key들이 변수 keys 안에 배열의 형태로 저장된다.
console.log('keys => ', keys);
// 실행 결과: keys => [ 'name', 'age', 'gender' ]
3-2. values
let values = Object.values(person); // 객체 person에 저장된 key의 값들이 변수 values 안에 배열의 형태로 저장된다.
console.log('values =>', values);
// 실행 결과: values => [ '홍길동', 30, '남자' ]
3-3. entries
key와 value를 묶어서 배열로 만든 배열
let entries = Object.entries(person);
// 객체 person에 저장된 key와 key의 값을 변수 entries 안에 2차원 배열의 형태로 저장한다. 행과 열이 있는 표는 아니다.
console.log('entries => ', entries);
// 실행 결과: entries => [ [ 'name', '홍길동' ], [ 'age', 30 ], [ 'gender', '남자' ] ]
3-4. assign
객체를 복사한다
let newPerson = {}; // 예시, 붙여넣기 할 대상은 빈 객체로 생성한다.
Object.assign(newPerson, person); // person의 key와 key 값을 복사하여 객체 newPerson에 저장한다.
console.log('newPerson =>', newPerson);
// 실행 결과: newPerson => { name: '홍길동', age: 30, gender: '남자' }
만약 key 값 중 하나를 수정해서 저장하고 싶다면
예제) 객체 person의 key와 key값을 복사하여 객체 newPerson에 넣어라. 단, age의 값은 31로 수정하라
Object.assign(newPerson, person, {age: 31});
console.log('newPerson =>', newPerson);
// 실행 결과: newPerson => { name: '홍길동', age: 31, gender: '남자' }
3-5. 객체 비교
객체 person01과 person02는 객체명만 다를 뿐 같은 key와 key값을 가지고있다.
이 경우 person01과 person02는 같은 객체인가?
let person01 ={
name: "홍길동",
age: 30,
gender: "남자"
};
let person02 ={
name: "홍길동",
age: 30,
gender: "남자"
};
console.log("answer is", person01 === person02);
// 실행 결과: answer is false
// 같은 객체가 아니다.
그렇다면 변수는 어떨까?
let str1 = "aaa";
let str2 = "aaa";
console.log("answer is", str1 === str2);
// 실행 결과: answer is true
무슨 차이일까?
객체와 배열은 다른 데이터 타입에 비해서 그 크기가 상당히 크기 때문에
메모리에 저장할 때 각각 별도의 공간에 저장한다.
person1과 person2라는 객체명은 각각 가지고 있는 key와 key값이 저장된 주소를 가지고 있을 뿐이다.
따라서 비록 person1과 person2가 서로 같은 데이터를 가지고 있다 하더라도 메모리 상에서의 그 위치는 다르기 때문에 완전히 같다고 할 수 없다.
이 내용은 3주차 메모리에서 더 자세히 배운다
그런데 만약 진짜 정말 진심 두 객체의 값이 같은지 검사하고 싶다면?
json의 stringigy 기능을 쓴다. 이 기능은 주어진 객체를 string, 문자열화한다.
console.log("answer is", JSON.stringify(person01) === JSON.stringify(person02));
// 실행 결과: answer is true
3-6. 객체 병합
let person03 = {
name: "홍길동",
age: 30,
};
let person04 = {
gender: "남자",
};
더 나아가서,
... : spread operator, ES6부터 나온 기능, 객체의 값을 풀어헤친다
let perfectMan = {...person03, ...person04};
console.log(perfectMan);
// 실행 결과: { name: '홍길동', age: 30, gender: '남자' }
이건 2주차에서 다시 배운다.