👋 Symbol() 함수
1. Symbol()
- 외부로 노출되는 것 허용 하지 않음
-
Symbol()
함수는 값을 생성하여 반환- 반환된 값을 볼 수 없음
const sym = Symbol(); console.log(sym); // Symbol() console.log(typeof sym); // symbol // 1. const sym = Symbol(); Symbol 오브젝트가 아니라, Symbol 값을 생성하여 반환 함 // 2. 새로운 값을 생성하여 반환하므로 값을 생성한다는 표현이 적절 함 // 3. console.log(sym) 생성한 Symbol 값이 출력되지 않고 Symbol 값을 생성한 코드 형태가 표시 됨 // 4. typeof sym Symbol로 생성한 값 타입은 symbol임
new
연산자를 사용할 수 없음
-
프로그램 전체를 통해 유일한 값 제공
const one = Symbol(); const two = Symbol(); console.log(one == two); // false // 1. Symbol()을 실행할 때마다 프로그램 전체에서 하나만 있는 값을 생성함 // 2. 따라서 one의 값과 two의 값이 다름
-
Symbol
값으로 연산 불가let sym = Symbol(); try { const add = sym + 5; } catch (e) { console.log('연산 불가'); } // 1. const add = sym + 5; Symbol이 값이지만 연산 할 수 없음
-
Symbol
타입 변경 불가let sym = Symbol(); try { +sym; } catch (e) { console.log('값 타입 변경 불가'); } // 1. +sym; 단항 + 연산자는 Number 타입으로 바꿈, Symbol 타입을 바꿀 수 없음 // 2. 이외에도 비교할 수 없는 등의 Symbol 값 사용에 제약이 있음 // 3. 이것은 외부에 값이 노출되지 않도록 하기 위해서 임 // 4. 외부에 Symbol 값이 노출되는 처리(계산, 변환 등)을 할 수 없음
- 파라미터에 주석, 설명을 작성
const sym = Symbol('주석, 설명'); console.log(sym); // Symbol(주석, 설명) // 1. const sym = Symbol("주석, 설명"); 파라미터에 Symbol()로 생성한 값의 설명, 주석을 문자열로 작성 함 // 2. 생성한 Symbol 값을 볼 수 없으므로 값 설명이 필요할 때마다 사용 // 3. Symbol() 실행에 영향을 미치지 않음 // 4. console.log(sym); 생성한 Symbol 값이 출력되지 않고 Symbol 값을 생성한 코드가 표시 됨
-
Symbol
값을 문자열로 바꿔서 연결const sym = Symbol('설명'); console.log(sym.toString() + '연결'); // Symbol(설명)연결 // 1. sym.toString() + "연결" // 2. Symbol 값을 toString()으로 변환하면 에러가 발생하지 않지만 // 3. 값이 변환되지 않고 값을 만든 형태에 문자열을 연결 함 // 4. new String(sym) 형태는 에러가 발생함
-
Template
에 사용const sym = Symbol('주석, 설명'); try { `${sym}`; } catch { console.log('`${sym}불가`'); } // 1. Symbol 값을 Template에 사용할 수 없음 // 2. 외부로 노출 되기 때문에