Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 유니티기초
- jpa 게시판
- 타입스크립트 기초
- 파이썬 괄호 회전하기
- 파이썬 기초
- 스프링 게시판 만들기
- springboot 사이드프로젝트
- 스프링부트 update
- 스프링부트 미니프로젝트
- 스프링게시판프로젝트
- springboot 게시판
- springboot 게시판만들기
- 괄호 회전하기 파이썬
- JS기초
- 유니티Cube
- springboot 게시판 프로젝트
- 스프링부트 게시판만들기
- typescript 기초문법
- 타입스크립트 기본문법
- 스프링부트 블로그
- 프로그래머스 괄호 회전하기 python
- spring jpa 게시판
- 스프링부트 블로그만들기
- python 괄호 회전하기
- spring jpa 사이드프로젝트
- 유니티
- springboot 미니프로젝트
- 유니티Material
- 스프링부트 회원가입
- 타입스크립트 기초문법
Archives
- Today
- Total
Digking's cave
JS 기초 ) 심볼 (Symbol) 본문
728x90
# Symbol() 은 유일한 식별자이다.
Symbol은 유일성을 보장한다.
console.log를 찍었을 때 같은 값으로 출력되지만 실질적으로는 다르다.
const a = Symbol();
const b = Symbol();
console.log(a); // Symbol()
console.log(b); // Symbol()
// a == b -> false
// a === b -> false
# Symbol에 설명을 추가하여 생성할 수 있다.
const a = Symbol('id'); //설명을 추가해서 생성할 수 있다
const b = Symbol('id');
console.log(a); // Symbol(id)
console.log(b); // Symbol(id)
// a == b -> false
// a === b -> false
# property key 를 Symbol을 통해 만들기
const id = Symbol('id');
const user = {
name : "Mike",
age : 30,
[id] : 'myid'
}
# Symbol을 사용하면 Object. 관련 함수들은 인식하지 않는다.
for문 사용시에도 Symbol로 만든 것은 건너뛴다.
Object.keys(user) // ["name","age"]
Object.values(user) // ["Mike",30]
Object.entriess(user) // [Array(2), Array(2)]
for(let a in user){} //Symbol은 안나옴
# 특정 객체의 원본데이터는 건들이지 않고, 속성을 추가할 수 있다.
const user = {
name : "Mike",
age : 30
}
const id = Symbol('id')
user[id] = 'myid'
Symbol.for() : 전역심볼
이름이 같으면 같은 객체를 가리켜야 할 때 사용
하나의 심볼만 보장 받을 수 있다. ( 없으면 만들고, 있으면 가져오기 때문에)
→ Symbol 함수는 매번 다른 Symbol 값을 생성하지만,
Symbol.for 는 하나를 생성한 뒤 키를 통해 같은 Symbol을 공유한다.
code 어디에서든 사용이 가능하다
const id1 = Symbol.for('id');
const id2 = Symbol.for('id');
// id1 === id2 ->true
//이름을 얻고싶다면
Symbol.keyFor(id1) //"id"
전역심볼이 아닌 심볼은 keyFor를 사용할 수 없다.
대신 description으로 이름을 알 수 있다.
const id = Symbol('id' 입니다.')
id.description; // "id' 입니다."
# Symbol을 완전히 숨기는 방법은 없다.
숨겨진 Symbol key 보는 법 ↓
const id = Symbol('id');
const user = {
name : "Mike",
age : 30,
[id] : 'myid'
}
Object.getOwnPropertySymbols(user); // [Symbol(id)]
// Symbol을 포함한 모든 객체의 key를 출력
Reflect.ownKeys(user); // ["name", "age", Symbol(id)]
# Symbol 을 활용한 코드 예제
// 다른 개발자가 만들어 놓은 기존 객체
const user = {
name : "Mike",
age : 30
};
// 내가 추가 작업 진행
// user.showName = function () {}; -> His showName is function () {}. 로 출력됨
const showName = Symbol("show name");
user[showName] = function () {
console.log(this.name);
};
user[showName]();
// 사용자가 접속하면 보는 메시지
for (let key in user) {
console.log(`His ${key} is ${user[key]}. `);
}
showName이 실행 된 것
기존 user의 값들 중 Symbol 제외하고 출력
참고 :
반응형
'기초 > JavaScript' 카테고리의 다른 글
JS 기초 ) Array(배열메소드) - splice / slice / includes / find / map / join / split (0) | 2022.08.02 |
---|---|
JS 기초) 문자열 메소드 (문자열 길이 / 문자열 특정위치 / 문자열 비교/ 문자 대소문자 / 문자 위치찾기 / 특정문자 찾기) (0) | 2022.08.02 |
JS 기초 ) Number , Math (0) | 2022.08.01 |
JS 기초 ) 객체 메소드(Object methods) (0) | 2022.07.11 |
JS 기초 ) 계산된 프로퍼티 (Computed property) (0) | 2022.07.11 |