반응형
Symbol 자료형은 쓸모없어보이는데 왜 있는거죠
쓸데없는 Symbol
- ES6부터 추가된 자료형
- 그렇게 실용성있진 않음
사용법
var 심볼 = Symbol('설명');
용도
1. Object 자료형의 비밀스런 key값
object를 하나 만들어보자.
var person = { name : 'Kim'};
근데 만약 밖에 공개하기 싫은 비밀스런 데이터(weight)를 저장하고 싶다면?
일반적이면 이렇게 저장하겠지만
person.weight = 100;
person; // {name: 'Kim', weight: 100}
Symbol을 이용해서 비밀스런 데이터를 저장해보자.
**원래 Object의 key값에는 string만 가능했는데, 이제 Symbol도 넣을 수 있다.**
var weight = Symbol('내 시크릿 몸무게임');
var person = { name: 'Kim'};
person.weight = 100;
person[weight] = 200;
person; // {name: 'Kim', weight: 100, Symbol(내 시크릿 몸무게임): 200}
object에 담긴 모든 자료형들을 출력하는 for in 을 사용해보자.
for (var key in person) {
console.log(person[key]);
}
// 'Kim'
// 100
**Symbol로 작성한 데이터는 반복문에서 출력하지 않는다**. 왜냐하면 **enumerable이 false**기 때문이다. (속성이 없음)
예제
Symbol을 이용하여 여러분 키를 저장해보세요.
var height = Symbol('내 키임');
var person = { name: 'Heo'};
person[height] = 167;
혹은 Symbol 직접 넣어도 OK
var height = Symbol('내 키임');
var person = { name: 'Heo', [height]: 167 };
2. import 해온 파일 / 라이브러리 쓸 때, 거기 있던 object에 자료를 추가하고 싶다면.
반복문에도 안뜨니까 기존 코드를 해칠 염려가 없다.
Symbol 특징
1. 설명이 같다고 같은 Symbol이 아님. Symbol 만들 떄마다 유니크한 Symbol이 생김.
var a = Symbol('설명1');
var b = Symbol('설명1');
a === b; // false
a와 b의 심볼에 설명이 동일해도 각 심볼은 다르다.
2. 전역 변수같은 전역 Symbol? => Symbol.for()로 만드는 전역 심볼
공통적인 심볼을 부여하고 싶다면?
var person = { name: 'kim', [height]: 160 };
var person1 = { name: 'kim', [height]: 160 };
var person2 = { name: 'kim', [height]: 160 };
그러면 전역 심볼을 만들면 된다.
var a = Symbol.for('설명1');
var b = Symbol.for('설명1');
Symbol.for()은 같은 설명을 가지고 있는 심볼이 이미 위에 있으면 기존 심볼을 복붙해준다.
var a = Symbol.for('설명1');
var b = a;
위랑 동일한 코드다.
var a = Symbol.for('설명1');
var b = Symbol.for('설명1');
a === b; // true
별로 쓸데도 없긴 함.
3. 기본 내장 Symbol들
Symbol을 만들고 출력을 할 때 이렇게 했었다.
person[weight]; // 200
저번 시간에 봤던 Symbol.iterator도 똑같다!
var 어레이 = [2,3,4];
어레이[Symbol.iterator]; // ⬅️ 자바스크립트가 array에 집어넣는 기본 Symbol
반응형
'Front-End: Web > JavaScript' 카테고리의 다른 글
[코딩애플] js part 3-10. Web Components: 커스텀 HTML 태그 만들기 (0) | 2022.10.22 |
---|---|
[코딩애플] js part 3-9. Map, Set 자료형 (0) | 2022.10.21 |
[코딩애플] js part 3-7. for in / for of 반복문과 enumerable, iterable 속성 (0) | 2022.10.21 |
[코딩애플] js part 3-6. async/await (0) | 2022.10.21 |
[코딩애플] js part 3-5. ES6 Promise (0) | 2022.10.21 |