👋 Symbol.toPrimitive
toPrimitive
- 오브젝트를 대응하는
Primitive
값으로 변환 -
대응, 기대하는 타입
- number, string, default
- ToPrimitive 스펙
-
오브젝트를 문자열에 대응
const point = { bonus: 100 }; console.log(point.toString()); // [object Object] const book = { toString() { return '책'; }, }; console.log(`${book}`); // 책 // 1. 문자열 대응은 toString()을 사용함 // 2. point.toString() Object.prototype.toString()가 호출 됨 // 3. `${book}` book 오브젝트의 toString()이 호출 됨
-
오브젝트를 숫자에 대응
const point = {bonus: 100}; console.log(point.valueOf()); // {bonus: 100} const book = { toString() { return 70 } valueOf() { return 30 } }; console.log(book * 20); // 600 // 1. 숫자 대응은 valueOf()를 사용함 // 2. point.valueOf() Object.prototype.valueOf()가 호출 됨 // 3. book * 20 book 오브젝트의 valueOf()가 호출되며 toString()이 호출되지 않음 // 4. valueOf()를 작성하지 않으면 toString()이 호출됨
-
Symbol.toPrimitive()
사용const obj = { [Symbol.toPrimitive](hint) { return hint === 'number' ? 30 : hint === 'string' ? '책' : 'default'; }, }; console.log(20 * obj); // 600 console.log(`${obj}` + 100); // 책100 console.log(obj + 50); // default50 console.log('default' === obj); // true;