Symbol

OwlSuri·2022년 7월 4일
0

JavaScript

목록 보기
3/9

심볼은 유일한 식별자를 만들떄 사용 : 유일성 보장

const a = Symbol(); // new는 붙이지 않는다
const b = Symbol(); // a === b false 똑같이 생겼어도 같지않다.
const c = Symbol('id'); // 설명을 붙여줄 수도 있다.

property key : 심볼형

const id = Symbol('id')
const user = {
  name : 'Suri',
  age : 4,
  [id]: 'myid'
}

id의 유일성이 보장된다.

Object.keys(user) // ['name', 'age']
Object.values(user) // ['Suri', 4]
Object.entries(user) // [Array(2), Array(2)]

Object mathod들은 심볼은 건너뛴다. for - in 도 건너뛴다.

=> 덮어쓰기가 방지된다.

Symbol.for() : 전역심볼

  • 하나의 심불만 보장받을 수 있음
  • 없으면 만들고, 있으면 가져오기 때문
  • Symbol함수는 매번 다른 Symbol값을 생성
  • Symbol.for 매소드는 하나를 생성한 뒤 키를 통해 같은 Symbol을 공유
const id1 = Symbol.for('id')
const id2 = Symbol.for('id')

id1 === id2  // true
Symbol.keyFor(id1) //id   이름 알려줌

description : 전역심볼이 아닌 심볼의 이름을 보는 매소드

const id = Symbol('id입니다')
id.description // 'id입니다.'

숨겨진 Symbol key 보는 법(심볼을 완전히 숨길 수는 없다)

const id = Symbol('id')

const user = {
  name:'Suri',
  age:4,
  [id] : 'myid'
}

Object.getOwnPropertySymbols(user) // Symbol(id)
Reflect.ownKeys(user)  // ['name', 'age', symbol(id)]

응용

const user = {
  name : 'Suri',
  age: 4,
}

const showName = Symbol('showName')
user[showName] = function (){
  console.log(this.name)
}

// 사용자가 보는 메시지
for(let key in user){
  console.log(`Her ${key} is ${user[key]}.`)
}

// Her name is Suri.
// Her age is 4

중간에 만약

user.showName = function(){}

이 들어가면, 사용자가 보는 메시지는
Her showName is function(){}
과 같은 이상한 메시지가 들어 갈 수 있는데,
이때 showName을 심볼로 유일하게 처리를 해놓으면 이런 위험이 없어진다.
다른 사람이 만들어 놓은 것을 덮어쓸일도 없고!

profile
기억이 안되면, 기록을 -

0개의 댓글