#4. Symbol

smiletmf·2022년 7월 5일
0

javascript grammar

목록 보기
4/20
post-thumbnail
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():전역 심볼

  • 하나의 심볼만 보장받을 수 있음
  • 없으면 만들고, 있으면 가져오기 때문
  • Symbol 함수는 매번 다른 Symbol 값을 생성하지만,
  • Symbol.for 메소드는 하나를 생성한 뒤 키를 통해 같은 Symbol을 공유
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.
profile
성장하는 개발자 유슬이 입니다!

0개의 댓글