3.4.4 Symbol()

jude·2022년 2월 8일
0

you don't know js

목록 보기
28/30
post-thumbnail
  • '심벌'은 ES6에서 처음 선보인, 새로운 원시 값 타입이다.
  • 심벌은 충돌 염려없이 객체 프로퍼티로 사용 가능한, 특별한 '유일 값'이다.

심벌 정의

var mysym = Symbol( "my own symbol" );
mysym; // Symbol(my own symbol)
mysym.toString(); // "Symbol(my own symbol)"
typsof mysym; // "symbol"

var a = { };
a[mysym] = "foobar";

Object.getOwnPropertySymbols( a ); // [ Symbol(my own symbol) ]

var symTest = Symbol( "Test 1" );
var symTest2 = Symbol( "Test 1" );

symTest === symTest2; // false
  • 심볼을 똑같이 선언해서 각각 변수에 담아도 둘은 서로 같지 않다.
  • 심볼의 타입은 symbol 이다.
  • 심볼을 객체의 key 로 사용할 수 있다.
  • for in 문을 사용할 때 심볼로 만든 키는 접근 불가능하다.
const id = 'str'

let obj = {
  [id]: 3,
  id: 1,
  key: 2
}

for( i in obj) {
  console.log( i );
}

// str
// id
// key

for in 문을 사용하여 객체에 어떤 프로퍼티가 있는지 확인할 수 있다,
그런데 프로퍼티를 Symbol로 만들면 for in문에서 접근할 수 없다.

const id = Symbol('str');

let obj = {
  [id]: 3,
  id: 1,
  key: 2
}

for( i in obj) {
  console.log( i );
}

// id
// key

객체를 생성할 때 외부에서 접근하지 않았으면 하는 프로퍼티나 메서드 이름에 언더스코어(_)를 붙이는 경우가 보통인데, 언더스코어가 앞에 붙은 프로퍼티 명도 언젠가는 심벌에 의해 완전히 대체될 가능성이 높다.

profile
UI 화면 만드는걸 좋아하는 UI개발자입니다. 프론트엔드 개발 공부 중입니다. 공부한 부분을 블로그로 간략히 정리하는 편입니다.

0개의 댓글