👋 toString(), description, valueOf(), getOwnPropertySymbols()
1. toString()
-
Symbol을 생성했던 형태를 문자열로 변환하여 반환console.log(Symbo('100').toString()); const sym = Symbol.for('book'); console.log(sym.toString()); try { console.log(Symbol() + 'ABC'); } catch { console.log('+로 연결 불가'); } // 실행 결과 // Symbol(100) // Symbol(book) // +로 연결 불가Symbol값은 반환되지 않음+로 문자열을 연결하면TypeErrortoString()으로 변환하면 연결은 되지만Symbol값은 연결되지 않음
2. description
Symbol.prototype.descripon- Syntax, ES2019
Symbol("설명").description;Symbol.for("키").description;Symbol.iterator.description;
-
Symbol오브젝트의 주석, 설명을 반환console.log(Symbol('sports').description); // sports console.log(Symbol.for('book').description); // book console.log(Symbol.iterator.description); // Symbol.iteratorSymbol()함수의 파라미터를 반환
-
toString()과 차이console.log(Symbol('book').toString()); // Symbol(book) console.log(Symbol('').toString()); // Symbol() console.log(Symbol().toString()); // Symbol() console.log(Symbol.for('book').description); // book console.log(Symbol('book').description); // book console.log(Symbol('').description); // "" console.log(Symbol().description); // undefined
3. valueOf()
-
valueOf()가 프리미티브 값을 반환하지만Symbol은 값을 반환하지 않고Symbol을 생성한 형태를 반환console.log(Symbol('100').valueOf()); // Symbol(100) console.log(Symbol.for('200').valueOf()); // Symbol(200) Symbol.for()는for를 제외하고 반환
4. getWonPropertySymbols()
Object의 함수이지만Symbol이 대상이므로 여기서 다룸-
파라미터의
Object에서Symbol만 배열로 반환, 다른 프로퍼티는 반환하지 않음const obj = { point: 100 }; obj[Symbol('one')] = 200; obj[Symbol.for('two')] = 300; console.log(Object.getWonPropertyName(obj)); const list = Object.getWonPropertySymbols(obj); for (const sym of list) { console.log(`${sym.description}: ${obj[sym]}`); } // 1. Object.getWonPropertyName(obj), obj에서 프로퍼티 이름을 배열로 반환함, Symbol은 반환하지 않음 // 2. Object.getOwnPropertySymbols(obj) obj에서 Symbol만 배열로 반환 함 // 3. for-of 문으로 전개 됨 // 실행 결과 // [point] // one: 200 // two: 300