자바스크립트 중급 강좌 (심볼)

히대·2023년 11월 10일

Javascript

목록 보기
14/28

Symbol : 유일성 보장

const a = Symbol(); // new를 붙이지 않음!
const b = Symbol();

console.log(a) -> Symbol()
console.log(b) -> Symbol()     a와 b가 같아보여도 같지않음.
							   a === b; false
							   a == b; false

property Key : 심볼형

const id = Symbol("id");
const user = {
	name : "Mike",
	age : 30,
    [id] : "myid"
}

user -> {name: "Mike", age: 30, Symbol(id): "myid"}
user[id] -> "myid"
object.keys(user); -> ["name","age"]
object.values(user); -> ["Mike",30]
object.entries(user); -> [Array(2), Array(2)]
for(let a in user){}

얘네들은 심볼은 건너뜀
const user = {
	name : "Mike",
    age : 30
}

const id = Symbol("id");
user[id] "myid";  특정개체에 원본데이터는 건들이지 않고 속성을 추가할수 있음

user.name = "myname"; 

Symbol.for() : 전역 심볼 코드 어디에서든 사용할수 있음

하나의 심볼만 보장받을 수 있음
없으면 만들고, 있으면 가져오기 때문
Symbol 함수는 매번 다른 Symbol 값을 생성하지만,
Symbol.for 메소드는 하나를 생성한 뒤 키를 통해 같은 Symbol을 공유

const id1 = Symbol.for("id");
const id2 = Symbol.for("id");

id1 === id2; -> true  // 그냥 Symbol과 큰 차이점.

**Symbol.keyfor(id1)** // "id" 이름을 얻고 싶을땐 .keyfor() 사용

description 전역심볼이 아닌 코드는 keyfor대신 .description 사용

const id = Symbol("id 입니다.");
**id.description;** >. "id 입니다."

숨겨진 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 key값을 포함한 
													   모든 key값을 보여줌
// 다른 개발자가 만들어 놓은 객체
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](); -> Mike 이런식으로 작업해야지 다른 개발자가 작성한 내용에 영향을 끼치지않음
 
// 사용자가 접속하면 보는 메세지
for (let key in user) {
	console.log("His ${key} id $(user[key])."); -> His name is Mike.
    											   His age is 30.
}
profile
아자아자 파이팅🔥

0개의 댓글