22.01.26
연휴 시작까지 이틀 남았습니다. 금요일은 오전 근무 후 퇴근이라 거의 노는 날이죵 인턴이여도 집에 가고 싶습니다.
1. Symbol이란
javascript는 객체 프로퍼티 키로 문자형과 심볼형 두가지를 허용합니다.
프로퍼티 키로 심볼값을 사용하면 어떤 이점이 있는지 알아보겠습니다.
2. Symbol
symbol은 유일한 값을 만들고 싶을 때 사용합니다.
let id = symbol(); 이런식으로 심볼값을 만듭니다.
인자값으로 description을 붙일수 있습니다.
let id = symbol('userid'); description 붙이기
* symbol은 문자로 변환이 되지 않습니다. javascript의 alert 함수가 거의 모든 값을 받을 수 있는 이유는 문자형으로의 암시적 형 변환이 일어나기 때문입니다. 아무튼 symbol은 문자로 변환이 되지 않습니다.
* symbol은 for in 반복문에서 제외됩니다. 이렇게 symbol형 프로퍼티를 숨길 수 있습니다.
3. global symbol registry 전역 심볼 레지스트리
전역 심볼 레지스트리 안에 심볼을 만들고 해당 심볼에 접근하면 이름이 같은 경우 항상 동일한 심볼을 반환해 줍니다.
레지스트리 안에 있는 심볼을 읽거나 새로운 심볼을 생성하려면 Symbol.for(key)를 사용하면 됩니다.
이 메서드를 호출하면 이름이 key인 심볼을 반환합니다. 조건에 맞는 심볼이 없으면 새로운 심볼을 만들고 레지스트리 안에 저장합니다.
4. Symbol.keyFor
let globalSymbol = Symbol.for("name");
let localSymbol = Symbol("name");
alert( Symbol.keyFor(globalSymbol) ); // name, 전역 심볼
alert( Symbol.keyFor(localSymbol) ); // undefined, 전역 심볼이 아님
alert( localSymbol.description ); // name
keyFor는 전역 심볼 레지스트리를 뒤져서 해당 심볼의 이름을 얻어냅니다.
전역 심볼이 아닌 인자가 넘어오면 Symbol.keyFor는 undefined를 반환합니다.
더 자세하게 정리할게 많지만 이 정도로 하고 다음에 추가로 포스팅하겠습니다.
'Javascript > Vanilla JS' 카테고리의 다른 글
javascript Number, String, template literal (0) | 2022.01.26 |
---|---|
javascript Object, primitive, object wrapper (0) | 2022.01.26 |
메서드(method), this, new, Constructor, Optional chaining(.?) (0) | 2022.01.25 |
Object, reference, copy, garbage collection. 객체, 참조, 가비지 콜렉 (0) | 2022.01.19 |
javascript ==, ===, querySelector(), querySelectorAll() (0) | 2022.01.10 |