key에 접근하는 2가지 방법. obj.key, obj['key']

1. 객체의 property에 접근하는 두 가지 방법
cosnt obj = {
name: 'junha'
}
obj.name
obj['name']
// 'junha'
2. object.key 방법의 문제점
하이픈(-)이 들어간 property에 접근할 수 없다.
obj.a-b
// (obj.a) - b
obj['b-c']
// obj의 key 'a-b'에 접근
var a = {
"a" : 1,
"b-c": 2,
"0d" : 3, // 선언 자체는 가능
"d0" : 4,
2: 5
}
console.log(a.a) // 1
console.log(a.b-c) // ReferenceError: c is not defined
console.log(a.0d) // SyntaxError: Invalid or unexpected token
// 변수는 숫자가 먼저 나오면 에러가 발생한다.
console.log(a.d0) // 4
console.log(a.2) // Uncaught SyntaxError: Unexpected number
console.log(a[2]) // 5
console.log(a['2']) // 5
console.log(Object.keys(a)[4]) // string
-
2에 대한 접근은 a[‘2’]로는 가능하지만, a.2는 에러가 발생한다.
-
마찬가지로 a[‘0d’]는 가능하지만 a.0d는 에러가 발생한다.
const a = {
"a" : 1,
2 : 2,
"b-c" : 3, // -
"— d" : 4, // —
" e " : 5 // space
}
-
놀랍게도 따옴표로 엮으면 하이픈,space 문자등을 포함 할 수 있다.
-
그럼 접근 가능할까? O_O 모두 접근가능하다!
-
여전히 문자열로 되어있고, 이는 .(dot)표현의 한계를 넘어 [] 표현으로 모두 접근가능하다.
- object[key] 방법으로 객체에 속성값이 문자열이라면 전부 접근가능하다.
4. 변수로 key에 접근하고 싶을 때
const obj = {
name : 'junha',
age : 20,
key : '9999'
}
const key = ‘age’
obj.age
obj["age"]
obj[key]
// 20
obj.key
// 9999
for (key in obj) {
console.log(obj.key)
// '9999', '9999', '9999'
console.log(obj[key])
// 'junha', 20, '9999'
}
- for문, map함수는 객체에 속성 개수만큼 loop를 돈다.
- obj.key는 obj["key"]와 같은 의미다.
5. 객체의 키를 변수로 할당하고 싶을 때 (ES6)
const key = 'tall'
const value = 180
const obj = {
[key]: value
}
obj
// { tall: 180 }