-
심볼 Symboljavascript 2023. 4. 9. 18:48반응형
* 객체의 property key는 문자형으로 반환 가능
const obj = { 1 : "1입니다.", false : "거짓" } Object.keys(obj);//["1", "flase"] : 문자형으로 반환됨 obj["1"]//"1입니다." obj["flase"]//"거짓"
* 객체의 property key는 symbol형으로도 반환 가능
- symbol은 유일한 식별자를 만들때 사용
- symbol을 만들때 설명을 붙일수도 있음
- symbol 함수는 매번 다른 symbol 값을 생성
const a = Symbol();//new를 붙이지 않음 const b = Symbol(); console.log(a);//Symbol() console.log(b);//Symbol() a === b;//false a == b;//false 즉, 일치연산자 동등연산자 모두 false가 나옴 = 유일한 식별자를 만들때 사용함 //--------------------------------------------------------------------------------------------- const id = Symbol("id"); const id02 = Symbol("id");//만약 설명이 똑같은 것을 또 만들게 된다면 console.log(id);//Symbol(id) console.log(id02);//Symbol(id) id === id02;//false id == id02;//false //--------------------------------------------------------------------------------------------- /*symbol을 객체의 키로 사용*/ const id = Symbol("id"); const user = { name : "Jin", age : 30, [id] : "myid", } console.log(user);//{name : "Jin", age : 30, Symbol(id) : "myid"} console.log(user[id]);//"myid" Object.keys(user);//["name", "age"] Object.values(user);//["Jin", 30] Object.entries(user);//[Array, Array] //키가 symbol형인 프로퍼티는 건너뜀 /*이렇게 숨겨지는 기능은 특정 객체의 원본 데이터를 건드리지 않고 속성을 추가할 수 있음*/ //------------------------------------------------------------------------------------------- /*다른 개발자가 만들어 놓은 객체*/ const user = { name : "Mike"; age : 30, } /*내가 작업 프로퍼티를 하나더 추가하고 싶을때*/ //user.showName = function(){}; //1. 이런 방법으로 추가하게되면 결과는 His name is Mike. His age is 30. His showName is function(){}. const showName = Symbol("showName"); user[showName] = function(){ console.log(this.name); } //2. 그래서 심볼showName을 하나 만들어 이곳에 추가했을때 결과는 His name is Mike. His age is 30.처럼 원본데이터를 건드리지 않고 심볼은 숨겨져서 나옴 user[showName]();//Mike /*사용자가 접속하면 보는 메세지*/ for(let key in user){ console.log(`His ${key} is ${user[key]}.`); }
* Symbol.for() : 전역심볼
- 하나의 심볼만 보장받을 수 있음
- 없으면 만들고 있으면 가져오기 때문에
- Symbol.for 메소드는 하나를 생성한 뒤 키를 통해 같은 Symbol을 공유
const id01 = Symbol.for("id"); const id02 = Symbol.for("id"); id01 === id02;//true /* 이름을 얻고 싶다면 keyFor 전역심볼이 아니면 keyFor를 사용할 수 없음 대신 description으로 이름을 알 수 있음 */ //전역심볼일때 keyFor 사용 Symbol.keyFor(id01);//id //전역심볼이 아닐 때 description 사용 const id = Symbol("id입니다."); id.description;//id입니다.
반응형'javascript' 카테고리의 다른 글
String 문자형 (0) 2023.04.13 Number, Math (0) 2023.04.12 객체Objcet에서 사용 가능한 methods와 Computed property (0) 2023.04.08 생성자 함수 (0) 2023.04.08 배열 array (0) 2023.03.28