배열과 마찬가지로 다량의 데이터를 한 번에 다룰 수 있는 참조자료형
데이터
키(key): 값(value)
의 조합으로 이루어져 있다 { name: "고양이" }
let myCatObj = {
name:"미오",
age: 8,
sex: "female-cat" }
let myCatArr = ["미오", 8, "female-cat"]
consol.log(personObj.name)
JavaScript에서 사용 가능한 모든 타입의 값은 프로퍼티가 될 수 있다.
let myCatMio = {
이름: "미오", // 문자열
나이: 9, // 숫자
중성화: true, // boolean
가족: ["엄마", "아빠", "오빠", "언니"], // 배열
'좋아하는 것들': { 친구: "미미", 좋아하는_간식: "츄르" }, // 객체
손: function() {
return`${this.나이}살 ${this.이름}가 손을 내민다.`; // this가 myCatMio라는 객체를 가리킨다
}, // 함수(메서드)
}
메서드(method)
: 프로퍼티를 참조하고 조작할 수 있는 동작
let greetings = {
sayHello: function(){
return 'hello!'
},
sayHi: function(name){
return `hi ${name}`
},
sayBye: function(){
return 'bye'
}
}
console.log(greetings.sayHello()); // hello!
console.log(greetings.sayHi('Mio')); // hi Mio
console.log(greetings['sayBye']()); // bye
따옴표 없이 쓰는 경우
_
, 달러 기호$
중 하나로 시작-
금지객체.key
객체['key']
문자열
을 입력해야 한다.+
로 문자열을 결합해서도 사용 가능[]
를 나열해서 값을 참조(read)💡객체의 프로퍼티 key가 변수
일 때에는 무조건 []
Bracket Notation으로 값을 호출해야한다.
console.log(myCatMio.이름) // 미오
console.log(myCatMio["이름"]) // 미오
let name = "이름";
console.log(myCatMio[name]); // 미오
let favorite = '좋아하는';
console.log(myCatMio[favorite + ' 것들'][favorite + '_간식']) // 츄르
myCatMio.가족.push('언니의 남편');
console.log(myCatMio.가족); // [ '엄마', '아빠', '오빠', '언니', '언니의 남편' ]
myCatMio['좋아하는 것들']['장난감'] = '실뭉치';
console.log(myCatMio['좋아하는 것들']);
// { '친구': '미미', '좋아하는_간식': '츄르', '장난감': '실뭉치' }
console.log(myCatMio.손()); // 9살 된 고양이 미오가 손을 내민다.
객체.key = value
: 프로퍼티 추가 / 수정
delete 객체.key
: 프로퍼티 삭제
delete myCatMio.손
console.log(myCatMio);
/* {
'이름': '미오',
'나이': 9,
'중성화': true,
'가족': [ '엄마', '아빠', '오빠', '언니' ],
'좋아하는 것들': { '친구': '미미', '좋아하는_간식': '츄르' },
} */
myCatMio.성별 = "남";
console.log(myCatMio);
/*{
'이름': '미오',
'나이': 9,
'중성화': true,
'가족': [ '엄마', '아빠', '오빠', '언니' ],
'좋아하는 것들': { '친구': '미미', '좋아하는_간식': '츄르' },
'성별': '남'
} */
myCatMio.성별 = "여";
console.log(myCatMio);
/*{
'이름': '미오',
'나이': 9,
'중성화': true,
'가족': [ '엄마', '아빠', '오빠', '언니' ],
'좋아하는 것들': { '친구': '미미', '좋아하는_간식': '츄르' },
'성별': '여'
} */
key in 객체
객체.key !== undefined
console.log('이름' in myCatMio); // true
console.log(myCatMio.가족 !== undefined); //true
console.log(myCatMio.출신 !== undefined); //false
📖 Object.keys()
key들의 배열
📖 Object.values()
value(값)들의 배열
console.log(Object.keys(myCatMio));
// [ '이름', '나이', '중성화', '가족', '좋아하는 것들', '성별' ]
console.log(Object.values(myCatMio));
// [ '미오', 9, true, [ '엄마', '아빠', '오빠', '언니', '언니의 남편' ], { '친구': '미미', '좋아하는_간식': '츄르', '장난감': '실뭉치' }, '여' ]
📖 Object.assign()
객체 합치기(복사)
let user = {name: 'kimcoding', job: 'student'};
let info = {job: 'engineer', age: 25};
let userInfo = Object.assign(user, info);
console.log(userInfo);
// { name: 'kimcoding', job: 'engineer', age: 25 }
배열.slice()와 비슷하게 객체 복사
로 사용할 수도 있다.
let myDogJjong = Object.assign({}, myCatMio);
console.log(myDogJjong);
// {'이름': '미오', '나이': 9, '중성화': true, '가족': [ '엄마', '아빠', '오빠', '언니', '언니의 남편' ], '좋아하는 것들': { '친구': '미미', '좋아하는_간식': '츄르', '장난감': '실뭉치' }, '성별': '여'}
// 프로퍼티는 복사되었지만 아예 다른 객체이다.
console.log(Object.is(myCatMio, myDogJjong)); // false
// myDogJjong 객체를 수정해도 myCatMio가 수정되지 않는다.
myDogJjong['이름'] = '쫑';
myDogJjong.나이 = 3;
delete myDogJjong['좋아하는 것들']
console.log(myDogJjong); // {'이름': '쫑', '나이': 3, '중성화': true, '가족': [ '엄마', '아빠', '오빠', '언니', '언니의 남편' ], '성별': '여'}
console.log(myCatMio); // {'이름': '미오', '나이': 9, '중성화': true, '가족': [ '엄마', '아빠', '오빠', '언니', '언니의 남편' ], '좋아하는 것들': { '친구': '미미', '좋아하는_간식': '츄르', '장난감': '실뭉치' }, '성별': '여'}
📖 Object.is(obj1, obj2)
두 객체가 같은지 비교
아래 중 하나를 만족하면 두 값은 같다
같은 값을 참조
해야 같은 객체console.log(Object.is("", "")); //true
console.log(Object.is(null, null)); // true
console.log(Object.is(undefined, undefined)); // true
console.log(Object.is(NaN, NaN)); // true
conlsole.log(Object.is(NaN, 0/0)); // true
let arry1 = [];
let arry2 = arry1;
console.log(Object.is(arry1, arry2)) // true
console.log(Object.is([], [])); // false
console.log(Object.is({}, {})); // false
console.log(Object.is(0, -0)); // false
console.log(Object.is(-0, -0)); // true
💡 객체의 key를 문자형 숫자
로도 지정할 수 있지만,
자동 오름차순 정렬
되어 의도하지 않은 결과가 나올 수 있으므로 주의해야한다.
let numKey = {
day: '2023.01.01',
2: '두번째',
한글: '가나다',
1: '첫번째',
3: '세번째'
}
console.log(numKey);
// { '1': '첫번째', '2': '두번째', '3': '세번째', day: '2023.01.01', '한글': '가나다' }
console.log(typeof numKey['2']); // string