Symbol์ *์์ํ ํ์ ์ด๊ณ ๊ฐ์ฒด์ ์์ฑ์ผ๋ก ์ฌ์ฉ๋๋ค.
(* ์์ํ : Number, String , Null, Undefined, Boolean, +Symbol(ES6) / ์ฐธ์กฐํ : Object)
Symbol์ ๋ฒ์ญํ๋ฉด, '์์ง' ์ธ๋ฐ ์ด์ฒ๋ผ ์ ์ผ๋ฌด์ดํ ๊ฐ, ๊ณ ์ ํ ๊ฐ์ ๊ฐ์ง๋ค.
-> ๊ฐ์ฒด ์์ฑ(like length)๋ ๋ฎ์ด์ธ ์ ์๋ค. ๊ทธ๋ ๊ธฐ๋๋ฌธ์ ๋ด์ฅ ์์ฑ๊ณผ ๊ตฌ๋ถ ํ ์ ์๋๋ก Symbol์ ์ฌ์ฉํ๋ค.
๋ํ Symbol์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ ๋ถ๋ณ๊ฐ! ์ด๋ค.
์๋ฅผ ๋ค์ด ๋ฐฐ์ด ๊ฐ์ฒด๋ฅผ "arr.length"๊ฐ ๊ฐ์ ์ด๋ฆ์ length๋ก ๋ฎ์ด์ฐ๋ฉด ๋ฎ์ด์จ์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์!
์ด๋ ๋ฐฐ์ด์ ๊ธธ์ด ๊ฐ์ ๊ทธ๋๋ก ์ ์งํ๋ฉด์, ๊ฐ์ ์ด๋ฆ์ length ์์ฑ์ ์ถ๊ฐํ๊ณ ์ ํ ๋
-->Symbol์ ์ฌ์ฉํ๋ค.
let ar =[1,2,3,4,5];
console.log(ar.length); //5
ar.length=50 //ar๋ฐฐ์ด length์์ฑ์ ์ ์ํ๊ณ 50์ ํ ๋น(๋ฎ์ด์ฐ๊ธฐ)
console.log(ar.length); // 50
console.log(ar) // (50) [1, 2, 3, 4, 5, empty × 45]
// Symbol ์ฌ์ฉ
let ar2=[1,2,3,4,5];
const length=Symbol('length');
ar2[length]=50; //ar2 ๋ฐฐ์ด์ length์์ฑ์ 50์ ํ ๋น
console.log(ar2.length) //5
console.log(ar2[length]) //50
console.log(ar2) //(5) [1, 2, 3, 4, 5, Symbol(length): 50]
Symbol์ ๋งค๋ฒ ์ฌ๋ณผํจ์ ํธ์ถ์ ์๋ก์ด ์ฌ๋ณผ ๊ฐ์ ์์ฑํฉ๋๋ค.
// Symbol('___') : '___' ์๋ฌด์๋ฏธ๋ฅผ ๊ฐ์ง ์๋๋ค. ๊ทธ๋์ Symbol() ๋น์นธ์ผ๋ก ์ ์ธํด๋ ๋ฌด๊ดํ๋ค.
let s1=Symbol('jane')
let s2=Symbol('jane')
console.log(s1==s2) // false - s1,s2๋ ๊ฐ์ ๊ฐ('jane')์ ์ฌ์ฉํ์ง๋ง ์์ ํ ๋ค๋ฅด๋ค.
๋ํ Symbol์ for ..in ๊ตฌ๋ฌธ์ผ๋ก ๋ฐ๋ณต์ ์ถ๋ ฅ๋์ง ์์ต๋๋ค. (์๋์ด ๊ฐ๋ฅํฉ๋๋ค.)
let ar6=[1,2,3,4]
ar6.someProperty=10
console.log(ar6)
// [1, 2, 3, 4, Symbol(someProperty): 10]
console.log(ar6) //4
for(let i in ar6){
console.log(i)
}
/*
0
1
2
3
*/
'javascript > ES6' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ES6 javascript : ๋น๋๊ธฐ ์ฒ๋ฆฌ(callback, Promise, Generator) (0) | 2022.01.27 |
---|---|
ES6 javascript : setTimeout vs setInterval - ํธ์ถ ์ค์ผ์ค๋ง ํจ์ (0) | 2022.01.26 |
ES6 javascript ๊ฐ์ฒด : ์ ๋๋ ์ดํฐ(Generator), ๋น๋๊ธฐ (0) | 2022.01.24 |
ES6 javascript ๊ฐ์ฒด : ํ๋กํ ํ์ (prototype), __proto__ (0) | 2022.01.19 |
ES6 Javascript : set()์๋ฃ๊ตฌ์กฐ - keys(), values() (0) | 2022.01.18 |