250x250
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 |
Tags
- 한글 공부 사이트
- REACT
- 내일배움캠프
- JavaScript
- 프로그래머스
- tanstack query
- 내일배움캠프 프로젝트
- useState
- 파이썬 for in
- 파이썬 enumerate
- 리액트 공식문서
- Next 팀 프로젝트
- 타입스크립트 props
- 파이썬 replace
- 타입스크립트 리액트
- 타입스크립트
- 내배캠 프로젝트
- 코딩테스트
- 파이썬 for
- 리액트 훅
- 리액트 프로젝트
- 파이썬 반복문
- 내일배움캠프 최종 프로젝트
- 파이썬 slice
- 파이썬 딕셔너리
- typeScript
- React Hooks
- useEffect
- 리액트
- 자바스크립트
Archives
- Today
- Total
sohyeon kim
[JS] 심볼 Symbol 본문
728x90
객체 프로퍼티 키 => 문자형
숫자형이나, 불리언으로 만들어도 문자형으로 반환된다.
const obj = {
1: "1입니다.",
false: "거짓",
};
Object.keys(obj); // ["1", "false"] 문자형으로 반환된다.
console.log(obj["1"]); // "1입니다."
console.log(obj["false"]); // "거짓"
// 접근할 때도 문자형으로 작성해야 함
💡 심볼 Symbol
유일한 식별자를 만들 때 사용
const a = Symbol();
const b = Symbol();
console.log(a); // Symbol()
console.log(b); // Symbol()
console.log(a == b); // false
console.log(a === b); // false
유일성을 보장한다! => 전체 코드 중 하나라는 것.
const id = Symbol("id"); // 괄호 안은 설명이라고 보면 된다. 디버깅할 때 편하다.
const id2 = Symbol("id"); // 설명은 같지만 id !== id2
프로퍼티 키를 심볼형으로 만들어보자.
const id = Symbol("id");
const user = {
name: "aoto",
age: 30,
[id]: "myid",
};
console.log(user); // {name: 'aoto', age: 30, Symbol(id): 'myid'}
console.log(user[id]); //myidd
console.log(Object.keys(user)); // ['name', 'age']
// Object.values()
// Object.entries()
// for(let a in user){} 위 애들은 심볼형 값을 건너뛴다.
이는 나중에 객체에 프로퍼티를 추가할 때 사용한다. key 를 유일하게 만들기 위해!
💡 Symbol.for() : 전역 심볼
Symbol 함수는 매번 다른 Symbol 값을 생성하지만,
Symbol.for 메소드는 하나를 생성한 뒤 키를 통해 같은 Symbol을 공유한다.
const id1 = Symbol.for("id");
const id2 = Symbol.for("id");
// id1 === id2 >> true
// 심볼 이름을 알고싶다면
Symbol.keyFor(id1); // "id"
// 전역이 아닌 그냥 심볼의 이름을 알고싶다면
id.description; // "id"
숨겨진 Symbole key 보는 법
Object.getOwnPropertySymbols(user); // [Symbol(id)]
// 심볼형 포함 모든 키를 보고싶다면
Reflect.ownKeys(user); // ["name", "age", Symbol(id)]
활용!
// 다른 개발자가 만들어 놓은 객체
const user = {
name: "aoto", // her name is aoto.
age: 30, // her age is 30.
};
// 내가 작업
// user.showName = function () {}; // her showName is function () {}.
// 이럴 때 심볼을 만든다.
const showName = Symbol("show name");
user[showName] = function () {
console.log(this.name);
};
user[showName](); // aoto
// 사용자가 접속하면 보는 메세지
for (let key in user) {
console.log(`her ${key} is ${user[key]}.`);
}
>> 원래 user에 showName이라는 메서드가 있었는지 고민할 필요가 없어진다.
>> 프로퍼티를 덮어쓸 일도 없다.
🔗 https://youtu.be/E9uCNn6BaGQ?si=DdmOzsPWhb04J5PF
728x90
반응형
'JavaScript' 카테고리의 다른 글
[JS] Math 종류 Math.ceil(), Math.floor(), Math.round(), toFixed() 등 (0) | 2023.12.14 |
---|---|
[JS] Number로 바꾸기 toString(), parseInt(), parseFloat(), 숫자 판별 isNaN (0) | 2023.12.14 |
[JS] Object methods & Computed property 객체 메소드와 계산된 프로퍼티 (0) | 2023.12.13 |
[JS] 생성자 함수 (0) | 2023.12.13 |
[JS] 변수 var, let, const (0) | 2023.12.13 |