Symbol.toStringTag
åºçº¿
广æ³å¯ç¨
èª 2017å¹´4æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
Symbol.toStringTag å
ç½®éç¨ï¼well-knownï¼symbol æ¯ä¸ä¸ªå符串å¼å±æ§ï¼ç¨äºå建对象çé»è®¤å符串æè¿°ãå®ç± Object.prototype.toString() æ¹æ³å
é¨è®¿é®ã
å°è¯ä¸ä¸
class ValidatorClass {
get [Symbol.toStringTag]() {
return "Validator";
}
}
console.log(Object.prototype.toString.call(new ValidatorClass()));
// Expected output: "[object Validator]"
Symbol.toStringTag ç屿§ç¹æ§ | |
|---|---|
| å¯å | å¦ |
| 坿䏾 | å¦ |
| å¯é ç½® | å¦ |
示ä¾
>é»è®¤æ ç¾
ä¸äºå¼æ²¡æ Symbol.toStringTagï¼ä½æ¯æé¢å¤ç toString() 表示ãæå
³å®æ´å表ï¼è¯·åè§ Object.prototype.toString()ã
Object.prototype.toString.call("foo"); // "[object String]"
Object.prototype.toString.call([1, 2]); // "[object Array]"
Object.prototype.toString.call(3); // "[object Number]"
Object.prototype.toString.call(true); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
Object.prototype.toString.call(null); // "[object Null]"
// ... and more
å ç½®ç toStringTag symbol
大夿°å
ç½®ç对象æä¾äºå®ä»¬èªå·±ç [Symbol.toStringTag] 屿§ãææå
置对象ç [Symbol.toStringTag] 屿§é½æ¯ä¸å¯åçï¼writableï¼ãä¸å¯æä¸¾çï¼enumerableï¼ä½æ¯å¯é
ç½®çï¼configurableï¼ã
Object.prototype.toString.call(new Map()); // "[object Map]"
Object.prototype.toString.call(function* () {}); // "[object GeneratorFunction]"
Object.prototype.toString.call(Promise.resolve()); // "[object Promise]"
// ... and more
ä½¿ç¨ toStringTag èªå®ä¹æ ç¾
å½åå»ºä½ èªå·±çç±»æ¶ï¼JavaScript é»è®¤ç¨âObjectâæ ç¾ï¼
class ValidatorClass {}
Object.prototype.toString.call(new ValidatorClass()); // "[object Object]"
ç°å¨ï¼å¨ toStringTag ç帮å©ä¸ï¼ä½ å¯ä»¥è®¾ç½®èªå·±çèªå®ä¹æ ç¾ï¼
class ValidatorClass {
get [Symbol.toStringTag]() {
return "Validator";
}
}
Object.prototype.toString.call(new ValidatorClass()); // "[object Validator]"
toStringTag éç¨äºææ DOM åå对象
ç±äº 2020 å¹´å¹´ä¸ WebIDL è§èçååï¼æµè§å¨æ£å¨åææ DOM åå对象添å Symbol.toStringTag 屿§ãä¾å¦ï¼è¦è®¿é® HTMLButtonElement ä¸ç Symbol.toStringTag 屿§ï¼
const test = document.createElement("button");
test.toString(); // Returns [object HTMLButtonElement]
test[Symbol.toStringTag]; // Returns HTMLButtonElement
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification > # sec-symbol.tostringtag > |