key === property name
value === property value
<example>
let difficult = {
'my name': 'boong',
//객체의 키에는 스페이스도 가능
color: 'silver',
// 키에 특수 문자가 없으면 따옴표 없이도 사용 가능
키: '한글인 키는 따옴표가 없어도 되는군!!',
'!키': '느낌표 있는 키는 따옴표가 필요하군',
$special: '$는 없어도 되는군'
};
let name = '키';
console.log(difficult.name);
:undefined
//name이라는 key값이 있었다면 그에 해당되는 프로퍼티에 접근할 수 있지만 존재하지 않아 undefined가 나오게 되고 변수로 접근할 때는 항상 대괄호로 접근해야함
-> console.log(difficult[name]);
<example 1>
//대괄호 안에 따옴표로 감싸주어야함.
console.log(difficult['color']);
<example 2>
//스페이스가 포함된 키는 대괄호로 접근
console.log(difficult['my name']);
<example 3>
//숫자로 된 키는 대괄호로 접근!
console.log(difficult['33']);
console.log(difficult.newProperty);
: undefined
//아직 difficult 라는 객체에 newProperty 프로퍼티가 없어서.
-> difficult.realNewProperty = '추가 됐다';
//이렇게 값을 넣어주면 생김
const mutableObj = {
name: '객체'
};
mutableObj = {
name: '수정'
}
mutableObj.name = '수정';
mutableObj.type = 'Object 타입';
메소드는 객체가 가지고 있는 동작
객체에 저장된 값이 함수일 때, 메서드라고 부른다
console.log();
//자바스크립트 어디에나 접근이 가능했으니 global 객체
console도 객체이고 console다음에 dot('.')으로 프로퍼티를 접근했고,
log라는 키의 값이 함수
//객체에 메서드를 정의방법
let methodObj = {
do: function() {
console.log('메서드 정의는 이렇게');
}
}
methodObj.do();
//호출방법
실무에서 사용되는 객체는 거의 중첩.
프로퍼티 값이 객체일 수도 있고,프로퍼티 값인 배열의 요소가 객체일 수도 있다.
let nestedObj = {
type: {
year: '2019',
'comment-type': [{
name: 'simple'
}]
}}
console.log(nestedObje.type['comment-type'][0].name);
//simple 출력하기!
:nestedObje.type는 year, comment-type이 있는 객체
nestedObje.type['comment-type']는 요소 1개(객체)인 배열
nestedObje.type['comment-type'][0] 인덱스 첫 번째인 객체를 가져옴
nestedObje.type['comment-type'][0].name 드디어 'simple'