const a = Symbol(); // new를 붙이지 않음, 유일한 식별자
const b = Symbol();
console.log(a); // Symbol()
console.log(b); // Symbol()
console.log(a === b); // false
-----------------------------------
// Symbol: 유일성 보장
const id = Symbol('id');
const id2 = Symbol('id');
console.log(id);
console.log(id2);
console.log(id === id2);
-----------------------------------
// Property key: 심볼형
const id = Symbol('id');
const user = {
name: 'Mike',
age: 30,
[id]: 'myid'
}
console.log(user); // {name: 'Mike', age: 30, Symbol(id): 'myid'}
var result = Object.keys(user);
console.log(result); // ['name', 'age']
var result = Object.values(user);
console.log(result); // ['Mike', '30']
var result = Object.entries(user);
console.log(result); // [Array(2), Array(2)]
------------------------------------
const user = {
name: 'Mike',
age: 30,
}
const id = Symbol('id');
user[id] = 'myid';
console.log(user); // {name: 'Mike', age: 30, Symbol(id): 'myid'}
Symbol.for():전역 심볼
const id1 = Symbol.for('id');
const id2 = Symbol.for('id');
console.log(id1 === id2); // true
------------------------------------
const id1 = Symbol.for('id');
const id2 = Symbol.for('id');
console.log(id1 === id2); // true
const result = Symbol.keyFor(id1);
console.log(result); // id
// description
const id = Symbol('id입니다.');
const result2 = id.description;
console.log(result2); // id입니다.
------------------------------------
const id = Symbol('id');
const user = {
name: 'Mike',
age: 30,
[id]: 'myid'
}
const result = Object.getOwnPropertySymbols(user);
console.log(result);
// [Symbol(id)]
// 0: Symbol(id)
// length: 1
const result2 = Reflect.ownKeys(user);
console.log(result2); // ['name', 'age', Symbol(id)]
const user = {
name: 'Mike',
age: 30
};
for(let key in user) {
console.log(`His ${key} is ${user[key]}.`);
}
// His name is Mike.
// His age is 30.
----------------------------------------
// 다른 개발자가 만들어 놓은 객체
const user = {
name: 'Mike',
age: 30
};
// 내가 작업
// user.showName = function(){}; // Error!
const showName = Symbol('show name');
user[showName] = function() {
console.log(this.name); // Mike
};
user[showName]();
// 사용자가 접속하면 보는 메세지
for(let key in user) {
console.log(`His ${key} is ${user[key]}.`);
}
// His name is Mike.
// His age is 30.