const obj = {
1: '숫자1',
false: '거짓',
}
Object.keys(obj);
// ['1', 'false']
obj['1']
객체의 프로퍼티 키는 문자형, 심볼형 가능
const id = Symbol('id');
const a = Symbol();
const b = Symbol();
console.log(a, b)
// Symbol() Symbol()
a === b // false
a !== b // true
a == b // false
//////////
// 설명이 똑같은 심볼을 또 만들어도, 두 변수는 다르게 취급.
const id = Symbol('id');
const id2 = Symbol('id');
console.log(id, id2);
// Symbol(id) Symbol(id)
id == id2 // false
const id = Symbol('id');
const user = {
name : 'Mike',
age : 30,
[id]: 'myId', // computed property key
}
console.log(user);
// {name: 'Mike', age: 30, Symbol(id): 'myId'}
Object.keys(user);
// ['name', 'age']
const id1 = Symbol.for('id');
const id2 = Symbol.for('id');
console.log(id1 === id2);
// true
Symbol.keyFor(id1);
// 'id'
const id3 = Symbol('id입니다');
Symbol.description; // id입니다
const id = Symbol('id');
const user = {
name : 'Mike',
age : 30,
[id] : 'myid'
}
Object.getOwnPropertySymbols(user);
// [Symbol(id)]
Reflect.ownKeys(user)
// ['name', 'age', Symbol(id)]
// 다른 개발자 작성 코드
const user = {
name : "MIKE",
age : 30,
}
// 내가 모르고 이후에 작업함
// user.showName = function(){};
// 다른 사람이 개발한 코드에 내 작업물이 섞여 예상하지 못한 결과가 나올 수 있음.
// 심볼 이용하여 작업
const showName = Symbol('show name');
user[showName] = function(){
console.log(this.name);
}
user[showName]();
// 사용자가 접속하면 보는 메세지
for (let key in user){
console.log(`my ${key} is ${user[key]}.`);
}
/* 결과
"MIKE"
"my name is MIKE."
"my age is 30."
*/