Baseline Widely available
Symbol.toPrimitive
æ¯å
ç½®ç symbol 屿§ï¼å
¶æå®äºä¸ç§æ¥åé¦éç±»åå¹¶è¿å对象åå§å¼çè¡¨ç¤ºçæ¹æ³ãå®è¢«ææç强类å转æ¢å¶ç®æ³ä¼å
è°ç¨ã
const object1 = {
[Symbol.toPrimitive](hint) {
if (hint === "number") {
return 42;
}
return null;
},
};
console.log(+object1);
// Expected output: 42
å¯å å¦ å¯æä¸¾ å¦ å¯é
ç½® å¦ æè¿°
å¨ Symbol.toPrimitive
屿§ï¼ç¨ä½å½æ°å¼ï¼ç帮å©ä¸ï¼å¯¹è±¡å¯ä»¥è½¬æ¢ä¸ºä¸ä¸ªåå§å¼ãè¯¥å½æ°è¢«è°ç¨æ¶ï¼ä¼è¢«ä¼ éä¸ä¸ªåç¬¦ä¸²åæ° hint
ï¼è¡¨ç¤ºè¦è½¬æ¢å°çåå§å¼çé¢æç±»åãhint
åæ°çå弿¯ "number"
ã"string"
å "default"
ä¸çä»»æä¸ä¸ªã
"number"
hint ç¨äºå¼ºå¶æ°åç±»å转æ¢ç®æ³ã"string"
hint ç¨äºå¼ºå¶å符串类å转æ¢ç®æ³ã"default"
hint ç¨äºå¼ºå¶åå§å¼è½¬æ¢ç®æ³ãhint
ä»
æ¯ä½ä¸ºé¦é项çåå¼±çä¿¡å·æç¤ºï¼å®ç°æ¶ï¼å¯ä»¥èªç±å¿½ç¥å®ï¼å°±å Symbol.prototype[Symbol.toPrimitive]()
䏿 ·ï¼ã该è¯è¨ä¸ä¼å¨ hint
åç»æç±»åä¹é´å¼ºå¶æ ¡æ£ï¼å°½ç®¡ [Symbol.toPrimitive]()
å¿
é¡»è¿åä¸ä¸ªåå§å¼ï¼å¦åå°æåº TypeError
ã
没æ Symbol.toPrimitive
屿§ç对象éè¿ä»¥ä¸åç顺åºè°ç¨ valueOf()
å toString()
æ¹æ³å°å
¶è½¬æ¢ä¸ºåå§å¼ï¼è¿å¨å¼ºå¶ç±»å转æ¢é¨åè¿è¡äºæ´è¯¦ç»çè§£éãSymbol.toPrimitive
å
许å®å
¨æ§å¶åå§è½¬æ¢è¿ç¨ãä¾å¦ï¼Date.prototype[Symbol.toPrimitive]
å° "default"
è§ä¸º "string"
å¹¶ä¸è°ç¨ toString()
è䏿¯ valueOf()
ãSymbol.prototype[Symbol.toPrimitive]
å¿½ç¥ hintï¼å¹¶æ»æ¯è¿åä¸ä¸ª symbolï¼è¿æå³çå³ä½¿å¨å符串ä¸ä¸æä¸ï¼ä¹ä¸ä¼è°ç¨ Symbol.prototype.toString()
ï¼å¹¶ä¸ Symbol
对象å¿
é¡»å§ç»éè¿ String()
æ¾å¼è½¬æ¢ä¸ºå符串ã
以ä¸ç¤ºä¾æè¿°äº Symbol.toPrimitive
屿§å¦ä½ä¿®æ¹ä»å¯¹è±¡è½¬æ¢çåå§å¼ã
// ä¸ä¸ªæ²¡ææä¾ Symbol.toPrimitive 屿§ç对象ï¼åä¸è¿ç®æ¶çè¾åºç»æã
const obj1 = {};
console.log(+obj1); // NaN
console.log(`${obj1}`); // "[object Object]"
console.log(obj1 + ""); // "[object Object]"
// æ¥ä¸é¢å£°æä¸ä¸ªå¯¹è±¡ï¼æå¨èµäºäº Symbol.toPrimitive 屿§ï¼åæ¥æ¥çè¾åºç»æã
const obj2 = {
[Symbol.toPrimitive](hint) {
if (hint === "number") {
return 10;
}
if (hint === "string") {
return "hello";
}
return true;
},
};
console.log(+obj2); // 10 â hint 忰弿¯ "number"
console.log(`${obj2}`); // "hello" â hint 忰弿¯ "string"
console.log(obj2 + ""); // "true" â hint 忰弿¯ "default"
è§è æµè§å¨å
¼å®¹æ§ åè§
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4