//자바스크립트는 객체 프로퍼티 키로 오직 문자형과 심볼형만 허용
//1. 심볼
let id = Symbol();
//Symbol()을 사용해 심볼값을 만듦.
//id는 새로운 심볼이 됨.
let id = Symbol("id");
//심볼 id에는 id라는 설명이 붙음.
//설명이 동일한 심볼을 만들어도 심볼값은 다름
let id1 = Symbol("id");
let id2 =Symbol("id");
alert(id1==id2);//false
let id = Symbol("id");
alert(id.toString());//Symbol(id)
let id=Symbol("id");
alert(id.description);//id
//2. 숨김 프로퍼티
//심볼을 이용해 '숨김(hidden)'프로퍼티를 만들수있음.
//숨김 프로퍼티: 외부 코드에서 접근이 불가능하고 값도 덮어쓸 수 없는 프로퍼티
let user = {//서드파티 코드에서 가져온 객체
name:"John"
};
let id = Symbol("id");
user[id]=1;
alert(user[id]);//심볼을 키로 사용해 데이터에 접근
//user는 서드파팉 코드에서 가지고 온 객체이므로 함부로 새로운 프로퍼티를 추가할 수 없음
//심볼을 사용하면 서드파티가 모르게 user에 식별자를 부여할수있음
let id = Symbol("id");
//객체리터럴{}을 사용해 객체를 만들경우
//대괄호를 사용해 심볼형 키를 만듦
let user = {
name:"John",
[id]: 123//"id"는 안됨
}
//키가 심볼인 프로퍼티는 for in 반복문에서 배제됨.
//Object.key(user)에서도 키가 심볼인 프로퍼티는 배제
//심볼형 프로퍼티 숨기기 원칙때문에 ..
//Object.assign은 접근 가능
let id = Symbol("id");
let user = {
[id]:123
};
let clone = Object.assign({},user);
//키가 심볼인 프로퍼티를 배제하지 않고
//객체 내 모든 프로퍼티를 복사함
alert(clone[id]);
//3. 전역 심볼
//전역 심볼 레지스트리
//이름이 같은 심볼이 같은 개체를 가리키길 원하는 경우
//전역 심볼 레지스트리 안에 심볼을 만들고 해당 심볼에 접근하면
//이름이 같은 겨우 항상 동일한 심볼 반환
//Symbol.for(key)
//:이름이 key인 심볼 반환 없으면 심볼 생성 저장
//전역 레지스트리에서 심볼을 읽음
let id = Symbol.for("id");//심볼이 존재하지 않으면 새로운 심볼 생성
let idAgain = Symbol.for("id");
alert(id===idAgain);//true
//Symbol.keyFor
//전역 심볼 레지스트리를 뒤져 해당 심볼의 이름을 얻어냄
//이름을 이용해 심볼을 찾음
let sym = Symbol.for("name");
let sym2 = Symbol.for("id");
//심볼을 이용해 이름을 얻음
alert(Symbol.keyFor(sym));//name
alert(Symbol.keyFor(sym2));//id
//description - 전역 심볼이 아닌 모든 심볼에서 이름을 얻고 싶으면
let globalSymbol = Symbol.for("name");
let localSymbol = Symbol("name");
alert( Symbol.keyFor(globalSymbol) ); // name, 전역 심볼
alert( Symbol.keyFor(localSymbol) ); // undefined, 전역 심볼이 아님
alert( localSymbol.description ); // name
처음 알게된 개념!
'JavaScript' 카테고리의 다른 글
[자바스크립트] #2 공부 기록 - 메서드와 this (0) | 2022.08.15 |
---|---|
[자바스크립트] #1 공부 기록 - 객체 (0) | 2022.08.09 |
[JavaScript] 자바스크립트 - 배열 내장 함수 (unshift, concat, join) (0) | 2021.03.11 |
[JavaScript] 자바스크립트 - 배열 내장 함수( splice, slice, shift, pop) (0) | 2021.03.10 |
[JavaScript] 자바스크립트 - 배열 내장 함수 ( findIndex, find, filter ) (0) | 2021.03.09 |