본문 바로가기

Dev/JAVASCRIPT

Javascript JS 심볼(Symbol)

// 유일성 보장
// Symbol('설명') 디버깅할때 편함
// new를 붙이지 않는다
const a = Symbol();
const b = Symbol();
console.log(a); //결과 Symbol()
console.log(b); //결과 Symbol()
console.log(a === b); //결과 false
console.log(a == b); //결과 false

const id = Symbol('id');
const id2 = Symbol('id');
console.log(id); //결과 Symbol(id)
console.log(id2); //결과 Symbol(id)
console.log(a === b); //결과 false
console.log(a == b); //결과 false

//property key 심볼형
//Object.keys, values, entries, for ... in 은 모두 심볼형 프로퍼티는 건너뜀
const id3 = Symbol('id');
const user = {
  name : 'Mike',
  age : 30,
  [id3] : 'myid'
}
console.log(user);

//Symbol.for() 전역 심볼
//하나의 심볼만 보장받을 수 있음 이유는 없으면 만들고, 있으면 가져오기 때문
//Symbol 함수는 매번 다른 Symbol 값을 생성하지만, Symbol.for 메소드는 하나를 생성한 뒤 키를 통해 같은 Symbol을 공유
const id4 = Symbol.for('idid');
const id5 = Symbol.for('idid');
console.log(id4 === id5); // 결과 true

 

원본을 훼손하지 않으면서 내가 작업한것을 사용할때 Symbol을 사용

ex)

// 다른 개발자가 만들어 놓은 객체
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(`His ${key} is ${user[key]}.`);
}

결과