Baseline Widely available *
symbol æ¯ä¸ç§åå§æ°æ®ç±»åãSymbol()
彿°ä¼è¿å symbol ç±»åçå¼ï¼è¯¥ç±»åå
·æéæå±æ§åéææ¹æ³ãå®çéæå±æ§ä¼æ´é²å 个å
建çæå对象ï¼å®çéææ¹æ³ä¼æ´é²å
¨å±ç symbol 注åï¼ä¸ç±»ä¼¼äºå
建对象类ï¼ä½ä½ä¸ºæé 彿°æ¥è¯´å®å¹¶ä¸å®æ´ï¼å 为å®ä¸æ¯æè¯æ³ï¼"new Symbol()
"ã
æ¯ä¸ªä» Symbol()
è¿åç symbol å¼é½æ¯å¯ä¸çãä¸ä¸ª symbol å¼è½ä½ä¸ºå¯¹è±¡å±æ§çæ è¯ç¬¦ï¼è¿æ¯è¯¥æ°æ®ç±»åä»
æçç®çãæ´è¿ä¸æ¥çè§£æè§ââglossary entry for Symbolã
const symbol1 = Symbol();
const symbol2 = Symbol(42);
const symbol3 = Symbol("foo");
console.log(typeof symbol1);
// Expected output: "symbol"
console.log(symbol2 === 42);
// Expected output: false
console.log(symbol3.toString());
// Expected output: "Symbol(foo)"
console.log(Symbol("foo") === Symbol("foo"));
// Expected output: false
è¯æ³ åæ°
description
å¯é
å¯éçï¼å符串类åã对 symbol çæè¿°ï¼å¯ç¨äºè°è¯ä½ä¸æ¯è®¿é® symbol æ¬èº«ã
ç´æ¥ä½¿ç¨Symbol()
å建æ°ç symbol ç±»åï¼å¹¶ç¨ä¸ä¸ªå¯éçå符串ä½ä¸ºå
¶æè¿°ã
var sym1 = Symbol();
var sym2 = Symbol("foo");
var sym3 = Symbol("foo");
ä¸é¢ç代ç å建äºä¸ä¸ªæ°ç symbol ç±»åãæ³¨æï¼Symbol("foo")
ä¸ä¼å¼ºå¶å°å符串âfooâè½¬æ¢æ symbol ç±»åã宿¯æ¬¡é½ä¼å建ä¸ä¸ªæ°ç symbol ç±»åï¼
Symbol("foo") === Symbol("foo"); // false
ä¸é¢å¸¦æ new
è¿ç®ç¬¦çè¯æ³å°æåº TypeError
é误ï¼
var sym = new Symbol(); // TypeError
è¿ä¼é»æ¢å建ä¸ä¸ªæ¾å¼ç Symbol å
è£
å¨å¯¹è±¡è䏿¯ä¸ä¸ª Symbol å¼ãå´ç»åå§æ°æ®ç±»åå建ä¸ä¸ªæ¾å¼å
è£
å¨å¯¹è±¡ä» ECMAScript 6 å¼å§ä¸åè¢«æ¯æãç¶èï¼ç°æçåå§å
è£
å¨å¯¹è±¡ï¼å¦ new Boolean
ãnew String
以ånew Number
ï¼å 为éçåå ä»å¯è¢«å建ã
å¦æä½ ççæ³å建ä¸ä¸ª Symbol å
è£
å¨å¯¹è±¡ (Symbol wrapper object
)ï¼ä½ å¯ä»¥ä½¿ç¨ Object()
彿°ï¼
var sym = Symbol("foo");
typeof sym; // "symbol"
var symObj = Object(sym);
typeof symObj; // "object"
å
¨å±å
±äº«ç Symbol
ä¸é¢ä½¿ç¨ Symbol()
彿°çè¯æ³ï¼ä¸ä¼å¨ä½ çæ´ä¸ªä»£ç åºä¸å建ä¸ä¸ªå¯ç¨çå
¨å±ç symbol ç±»åãè¦å建跨æä»¶å¯ç¨ç symbolï¼çè³è·¨åï¼æ¯ä¸ªé½æå®èªå·±çå
¨å±ä½ç¨åï¼ï¼ä½¿ç¨ Symbol.for()
æ¹æ³å Symbol.keyFor()
æ¹æ³ä»å
¨å±ç symbol 注å表设置ååå¾ symbolã
Object.getOwnPropertySymbols()
æ¹æ³è®©ä½ 卿¥æ¾ä¸ä¸ªç»å®å¯¹è±¡ç符å·å±æ§æ¶è¿åä¸ä¸ª symbol ç±»åçæ°ç»ã注æï¼æ¯ä¸ªåå§åçå¯¹è±¡é½æ¯æ²¡æèªå·±ç symbol 屿§çï¼å æ¤è¿ä¸ªæ°ç»å¯è½ä¸ºç©ºï¼é¤éä½ å·²ç»å¨å¯¹è±¡ä¸è®¾ç½®äº symbol 屿§ã
Symbol.length
é¿åº¦å±æ§ï¼å¼ä¸º 0ã
Symbol.prototype
symbol
æé 彿°çååã
é¤äºèªå·±å建ç symbolï¼JavaScript è¿å 建äºä¸äºå¨ ECMAScript 5 ä¹åæ²¡ææ´é²ç»å¼åè ç symbolï¼å®ä»¬ä»£è¡¨äºå é¨è¯è¨è¡ä¸ºãå®ä»¬å¯ä»¥ä½¿ç¨ä»¥ä¸å±æ§è®¿é®ï¼
Symbol.iterator
ä¸ä¸ªè¿åä¸ä¸ªå¯¹è±¡é»è®¤è¿ä»£å¨çæ¹æ³ã被 for...of
使ç¨ã
Symbol.asyncIterator
å®éªæ§
ä¸ä¸ªè¿å对象é»è®¤ç弿¥è¿ä»£å¨çæ¹æ³ã被 for await of
使ç¨ã
Symbol.match
ä¸ä¸ªç¨äºå¯¹å符串è¿è¡å¹é
çæ¹æ³ï¼ä¹ç¨äºç¡®å®ä¸ä¸ªå¯¹è±¡æ¯å¦å¯ä»¥ä½ä¸ºæ£å表达å¼ä½¿ç¨ã被 String.prototype.match()
使ç¨ã
Symbol.replace
ä¸ä¸ªæ¿æ¢å¹é
å符串çåä¸²çæ¹æ³ã被 String.prototype.replace()
使ç¨ã
Symbol.search
ä¸ä¸ªè¿åä¸ä¸ªå符串ä¸ä¸æ£å表达å¼ç¸å¹é
çç´¢å¼çæ¹æ³ã被 String.prototype.search()
使ç¨ã
Symbol.split
ä¸ä¸ªå¨å¹é
æ£å表达å¼çç´¢å¼å¤æåä¸ä¸ªåç¬¦ä¸²çæ¹æ³.ã被 String.prototype.split()
使ç¨ã
Symbol.hasInstance
ä¸ä¸ªç¡®å®ä¸ä¸ªæé å¨å¯¹è±¡è¯å«ç对象æ¯å¦ä¸ºå®çå®ä¾çæ¹æ³ã被 instanceof
使ç¨ã
Symbol.isConcatSpreadable
ä¸ä¸ªå¸å°å¼ï¼è¡¨æä¸ä¸ªå¯¹è±¡æ¯å¦åºè¯¥ flattened 为å®çæ°ç»å
ç´ ã被 Array.prototype.concat()
使ç¨ã
Symbol.unscopables
æ¥æåç»§æ¿å±æ§åçä¸ä¸ªå¯¹è±¡çå¼è¢«æé¤å¨ä¸ç¯å¢ç»å®çç¸å ³å¯¹è±¡å¤ã
Symbol.species
ä¸ä¸ªç¨äºå建派ç对象çæé å¨å½æ°ã
Symbol.toPrimitive
ä¸ä¸ªå°å¯¹è±¡è½¬åä¸ºåºæ¬æ°æ®ç±»åçæ¹æ³ã
Symbol.toStringTag
ç¨äºå¯¹è±¡çé»è®¤æè¿°çå符串å¼ã被 Object.prototype.toString()
使ç¨ã
Symbol.for(key)
使ç¨ç»å®ç key æç´¢ç°æç symbolï¼å¦ææ¾å°åè¿å该 symbolãå¦åå°ä½¿ç¨ç»å®ç key å¨å ¨å± symbol 注å表ä¸å建ä¸ä¸ªæ°ç symbolã
Symbol.keyFor(sym)
ä»å ¨å± symbol 注å表ä¸ï¼ä¸ºç»å®ç symbol æ£ç´¢ä¸ä¸ªå ±äº«çï¼symbol keyã
ææ Symbols ç»§æ¿èª Symbol.prototype
.
Symbol.prototype.description
ä¸ä¸ªåªè¯»çåç¬¦ä¸²ï¼æä¸ºå¯¹è¯¥ Symbol 对象çæè¿°
Symbol.prototype.toSource
è¿å该 Symbol å¯¹è±¡çæºä»£ç ãè¯¥æ¹æ³éåäº Object.prototype.toSource
æ¹æ³
Symbol.prototype.toString
è¿åä¸ä¸ªå
å«ç该 Symbol 对象æè¿°çå符串ãè¯¥æ¹æ³éåäº Object.prototype.toString
æ¹æ³
Symbol.prototype.valueOf
è¿å该 Symbol 对象ãè¯¥æ¹æ³éåäº Object.prototype.valueOf
æ¹æ³
Symbol.toPrimitive
è¿å该 Symbol 对象ã
typeof
è¿ç®ç¬¦è½å¸®å©ä½ è¯å« symbol ç±»å
typeof Symbol() === "symbol";
typeof Symbol("foo") === "symbol";
typeof Symbol.iterator === "symbol";
Symbol ç±»å转æ¢
å½ä½¿ç¨ symbol å¼è¿è¡ç±»åè½¬æ¢æ¶éè¦æ³¨æä¸äºäºæ ï¼
TypeError
é误 (e.g. +sym
or sym | 0
).Object(sym) == sym
returns true.
Symbol("foo") + "bar"
å°æåºä¸ä¸ª TypeError
(can't convert symbol to string).String(sym)
conversion çä½ç¨ä¼å symbol ç±»åè°ç¨ Symbol.prototype.toString()
䏿 ·ï¼ä½æ¯æ³¨æ new String(sym)
å°æåºå¼å¸¸ãfor...in
è¿ä»£
Symbols å¨ for...in
è¿ä»£ä¸ä¸å¯æä¸¾ãå¦å¤ï¼Object.getOwnPropertyNames()
ä¸ä¼è¿å symbol 对象ç屿§ï¼ä½æ¯ä½ è½ä½¿ç¨ Object.getOwnPropertySymbols()
å¾å°å®ä»¬ã
var obj = {};
obj[Symbol("a")] = "a";
obj[Symbol.for("b")] = "b";
obj["c"] = "c";
obj.d = "d";
for (var i in obj) {
console.log(i); // logs "c" and "d"
}
Symbols ä¸ JSON.stringify()
å½ä½¿ç¨ JSON.stringify() æ¶ï¼ä»¥ symbol å¼ä½ä¸ºé®ç屿§ä¼è¢«å®å ¨å¿½ç¥ï¼
JSON.stringify({ [Symbol("foo")]: "foo" });
// '{}'
æ´å¤ç»èï¼è¯·ç JSON.stringify()
ã
å½ä¸ä¸ª Symbol å è£ å¨å¯¹è±¡ä½ä¸ºä¸ä¸ªå±æ§ç鮿¶ï¼è¿ä¸ªå¯¹è±¡å°è¢«å¼ºå¶è½¬æ¢ä¸ºå®å è£ è¿ç symbol å¼ï¼
var sym = Symbol("foo");
var obj = { [sym]: 1 };
obj[sym]; // 1
obj[Object(sym)]; // still 1
è§è æµè§å¨å
¼å®¹æ§ åèææ¡£
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