let difficult = {
33: '숫자 형식도 되네',
'my name': '스페이스 포함 가능',
color: 'silver', //특수문자(스페이스도) 없으면 따옴표 없어도 된다
키: '한글인 키는 따옴표가 없어도 되는군!!',
'!키': '느낌표 있는 키는 따옴표가 필요하군',
$special: '$는 없어도 되는군',
'hey-yo': '이런 것도 따옴표 필요?' //필요!
};
변수 네이밍과의 차이점
- 변수 이름은 숫자로 시작할 수 없으며, 기호는 $와 _만 들어갈 수 있다.
응용 예제 (⭐⭐중첩된 객체로의 접근)
"HTML Guide"
데이터에 접근하기let objData = { name: 50, address: { email: "gaebal@gmail.com", home: "위워크 선릉2호점" }, books: { year: [2019, 2018, 2006], info: [{ name: "JS Guide", price: 9000 }, { name: "HTML Guide", price: 19000, author: "Kim, gae bal" }] } };
- 방법1.
console.log(objData.books.info[1].name)
- 방법2
console.log(objData["books"]["info"][1]["name"])
1. 프로퍼티 value값 중 배열
에 접근할 때 주의하기
2. ⭐ 스페이스 포함된 key
및 변수
로 접근할 때에는 대괄호로만 접근 가능!
console.log(difficult.my name); //오류
console.log(difficult['my name']); //프로퍼티 정상 접근
3. 객체의 property명에 접근할 때는 무조건 .key
or ["key"]
새로운 프로퍼티 할당
difficult[name] = '값 바꾼다';
difficult.color = '색깔';
const
로 선언된 변수에 객체를 재할당하는 것은 불가하지만 프로퍼티에 접근해서 value값을 수정하거나 프로퍼티를 추가하는 것은 에러가 나지 않는다
const mutableObj = {
name: '객체'
};
mutableObj = {
name: '수정'
}
mutableObj.name = '수정';
mutableObj.type = 'Object 타입';
메서드 정의
let methodObj = { do: function() { console.log('메서드 정의는 이렇게'); } }
const hiObj = {
name: '안녕'
};
const helloObj = {
name: '안녕'
};
console.log(hiObj === helloObj); //⭐false
console.log(hiObj.name === helloObj.name); //⭐true
💡 예제 중 헷갈렸던 부분
let myProfile = {
name: '김개발',
address: {
email: 'geabal@gmail.com',
home: '위워크'
},
'my favorite': {
food: [{
name: '샐러드',
price: 3500
}, {
name: '삼겹살',
price: 15000
}],
hobby: ['축구']
}
}
function getAnswer() {
let salad = myProfile['my favorite'].food[0].name;
return salad;
}
'my favorite' key의 내부 값에 접근할 때,
'my favorite': { } 중괄호 내부 값도 객체이므로 똑같이 마침표 또는 대괄호로 접근해주기