- Symbolํจ์๋ฅผ ํธ์ถํ์ฌ ์์ฑํจ.
- ์ ์ผํ ์๋ณ์๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ฌ์ฉ
- ์ธ์๋ก ํด๋น ์๋ณ์์ ์ค๋ช ์ ๋ถ์ฌํ ์ ์์.
- ์ ํ์ ์ผ๋ก ๋ฌธ์์ด์ ์ธ์๋ก ์ ๋ฌํ ์ ์์. ์ด ๋ฌธ์์ด์ ์ฌ๋ฒ ๊ฐ์ ๋ํ ์ค๋ช ์ผ๋ก ๋๋ฒ๊น ์ฉ๋๋ก ์ฌ์ฉํจ~!, ์ฌ๋ฒ ๊ฐ์ ๋ํ ์ค๋ช ์ด ๊ฐ๋๋ผ๋ ๊ฐ์ ์ ์ผ๋ฌด์ดํ ๊ฐ์!!!
- ์๋ฌต์ ์ผ๋ก ๋ฌธ์์ด๊ณผ ์ซ์๋ก ํ์ ๋ณํ์ง ์์ผ๋ฉฐ ๋ถ๋ฆฌ์ธ ํ์ ์ผ๋ก๋ ์๋ฌต์ ํ์ ๋ณํ๋๋ค.
๐พ #1
const a = Symbol(); // new๋ฅผ ๋ถ์ด์ง ์์
/* ์ ์ผํ ์๋ณ์ */
const a = Symbol();
const b = Symbol();
console.log(a === b) // false
console.log(a == b) // false
๐พ #2 property key:์ฌ๋ณผํ
const id = Symbol('id');
const user = {
name: 'Mike',
[id] : 'myid'
}
console.log(user); // {name: 'Mike', Symbol(id): 'myid'}
๐๐ป Object.keys(user), Object.values(user), Object.entries(user), for(let a in user){} ๋ชจ๋ ์ฌ๋ณผํ์ ๊ฑด๋๋ฐ๊ณ ์คํํจ!!
๐พ #1 symbol ์ฌ์ฉX
// ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ๋ง๋ค์ด ๋์ ๊ฐ์ฒด
const user = {
name: 'Zooyaho',
age: 34,
}
// ๋ด๊ฐ ์์
user.showName = function() {}
// ์ฌ์ฉ์๊ฐ ์ ์ํ๋ฉด ๋ณด๋ ๋ฉ์ธ์ง
for( let key in user) {
console.log(`His ${key} is ${user[key]}.`);
}
๐console
๐พ #2 symbol ์ฌ์ฉ
// ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ๋ง๋ค์ด ๋์ ๊ฐ์ฒด
const user = {
name: 'Zooyaho',
age: 34,
}
// ๋ด๊ฐ ์์
const showName = Symbol("show name");
user[showName] = function() {
console.log(this.name);
}
// ์ฌ์ฉ์๊ฐ ์ ์ํ๋ฉด ๋ณด๋ ๋ฉ์ธ์ง
for( let key in user) {
console.log(`His ${key} is ${user[key]}.`);
}
๐console
- Object.getOwnPropertySymbols(๊ฐ์ฒด);
- Reflect.ownKeys(๊ฐ์ฒด);
- ์ ์ญ ์ฌ๋ณผ
- ์์ผ๋ฉด ๋ง๋ค๊ณ , ์์ผ๋ฉด ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ํ๋์ ์ฌ๋ณผ๋ง ๋ณด์ฅ๋ฐ์ ์ ์์.
- Symbol ํจ์๋ ๋งค๋ฒ ๋ค๋ฅธ Symbol ๊ฐ์ ์์ฑํ์ง๋ง, Symbol.for ๋ฉ์๋๋ ํ๋๋ฅผ ์์ฑํ ๋ค ํค๋ฅผ ํตํด ๊ฐ์ Symbol์ ๊ณต์ ํจ.
const idA = Symbol.for('id');
const idB = Symbol.for('id');
console.log(idA === idB) // true
- Symbol.keyFor(๋ณ์)
- ํด๋น ๋ณ์์ symbol key๊ฐ์ ์ ์ ์์.
const idA = Symbol.for('id');
console.log(Symbol.keyFor(idA)); // 'id'
- ์ ์ญ ์ฌ๋ณผ์ด ์๋ ์ฌ๋ณผ์ keyFor()์ ์ฌ์ฉํ ์ ์์.
const id = Symbol('id ์
๋๋ค.');
console.log(id.description); // 'id ์
๋๋ค.'