Baseline Widely available *
Symbol
ã¯çµã¿è¾¼ã¿ãªãã¸ã§ã¯ãã§ãããã³ã³ã¹ãã©ã¯ã¿ã¼ã¯ä¸æã§ãããã¨ãä¿è¨¼ããã¦ããã·ã³ãã«ããªããã£ãï¼ã·ã³ãã«å¤ã¾ãã¯åã«ã·ã³ãã«ï¼ãè¿ãã¾ããã·ã³ãã«ã¯ãä»ã®ã³ã¼ãããªãã¸ã§ã¯ãã«è¿½å ããå¯è½æ§ã®ãããã¼ã¨è¡çªããªãããã«ãã¾ããä»ã®ã³ã¼ãããªãã¸ã§ã¯ãã«ã¢ã¯ã»ã¹ããããã«é常使ç¨ããã¡ã«ããºã ããé ããããããã«ã䏿ã®ããããã£ãã¼ããªãã¸ã§ã¯ãã«è¿½å ããããã«ãã使ç¨ããã¾ããããã«ãã£ã¦å¼±ãã«ãã»ã«åãã¾ãã¯å¼±ãå½¢ã®æ
å ±é è½ãå®ç¾ã§ãã¾ãã
Symbol()
ãå¼ã³åºããã³ã«ã䏿ãªã·ã³ãã«ãè¿ããã¨ãä¿è¨¼ããã¦ãã¾ãããã¹ã¦ã® Symbol.for("key")
ãå¼ã³åºãã¨ãæå®ããã "key"
ã®å¤ã«å¯¾ãã¦å¸¸ã«åã Symbol ãè¿ãã¾ããSymbol.for("key")
ãå¼ã³åºãããã¨ãä¸ãããããã¼ãæã¤ Symbol ãã°ãã¼ãã«ãª Symbol ã¬ã¸ã¹ããªã¼ã§è¦ã¤ããã°ããã® Symbol ãè¿ããã¾ããããã§ãªãå ´åã¯ãæ°ãã Symbol ã使ãããä¸ãããããã¼ã®ä¸ã§ã°ãã¼ãã« Symbol ã¬ã¸ã¹ããªã¼ã«è¿½å ãããè¿ããã¾ãã
æ°ããããªããã£ãã·ã³ãã«ã使ããã«ã¯ãSymbol()
ã¨è¨è¿°ãããã®èª¬æã¨ãã¦ãªãã·ã§ã³ã®æååãæå®ãã¾ãã
const sym1 = Symbol();
const sym2 = Symbol("foo");
const sym3 = Symbol("foo");
ä¸è¨ã®ã³ã¼ã㯠3 ã¤ã®æ°ããã·ã³ãã«ã使ãã¾ããSymbol("foo")
ã¯ãæåå "foo"
ãã·ã³ãã«ã«å¤æããããã§ã¯ãªããã¨ã«æ³¨æãã¦ãã ãããããã¯æ¯åæ°ããã·ã³ãã«ã使ãã¾ãã
Symbol("foo") === Symbol("foo"); // false
次ã®ããã« new
æ¼ç®åãä»ããæ§æã§ã¯ãTypeError
ãçºçãã¾ãã
const sym = new Symbol(); // TypeError
ããã¯ãä½è
ãæ°ããã·ã³ãã«å¤ã®ä»£ããã«æç¤ºç㪠Symbol
ã©ããã¼ãªãã¸ã§ã¯ãã使ãããã¨ãé²ããã®ã§ãããã®ä»ã®ããªããã£ããã¼ã¿åã§ã¯ãæç¤ºçãªã©ããã¼ãªãã¸ã§ã¯ãã使ãããã¨ã¯ä¸è¬çã«å¯è½ãªã®ã§ï¼new Boolean
ãnew String
ãnew Number
ãªã©ï¼ãé©ãããããã¾ããã
æ¬å½ã« Symbol
ã©ããã¼ãªãã¸ã§ã¯ãã使ãããå ´åã¯ãObject()
颿°ã使ç¨ãã¦ãã ããã
const sym = Symbol("foo");
typeof sym; // "symbol"
const symObj = Object(sym);
typeof symObj; // "object"
ã·ã³ãã«ã¯åç
§å䏿§ãæã¤å¯ä¸ã®ããªããã£ããã¼ã¿åã§ããããï¼ã¤ã¾ããåãã·ã³ãã«ã 2 åº¦ä½æãããã¨ã¯ã§ããªãï¼ãããæå³ã§ã¯ãªãã¸ã§ã¯ãã®ããã«æ¯ãèãã¾ããä¾ãã°ãã·ã³ãã«ã¯ã¬ãã¼ã¸ã³ã¬ã¯ãã§ããã®ã§ãWeakMap
ãWeakSet
ãWeakRef
ãFinalizationRegistry
ãªãã¸ã§ã¯ãã«æ ¼ç´ã§ãã¾ãã
ä¸è¨ã®æ§æã§ Symbol()
颿°ã使ç¨ããã¨ãããã°ã©ã ã®ã©ã¤ãã¿ã¤ã ãéãã¦å¤ã䏿ã§ããã·ã³ãã«ã使ããã¾ãããã¡ã¤ã«ãã¾ããã§ãããã«ã¯ã¬ã«ã ï¼ãããããç¬èªã®ã°ãã¼ãã«ã¹ã³ã¼ããæã¤ï¼ãã¾ããã§å©ç¨å¯è½ãªã·ã³ãã«ã使ããã«ã¯ãSymbol.for()
㨠Symbol.keyFor()
ã¡ã½ããã使ç¨ãã¦ãã°ãã¼ãã«ãªã·ã³ãã«ã¬ã¸ã¹ããªã¼ããã·ã³ãã«ãè¨å®ãããåå¾ããããã¾ãã
ãªãããã°ãã¼ãã«ã·ã³ãã«ã¬ã¸ã¹ããªã¼ãã¯æ¶ç©ºã®æ¦å¿µã«éãããJavaScript ã¨ã³ã¸ã³ã®å
é¨ãã¼ã¿æ§é ã«å¯¾å¿ãããã®ãããã¨ã¯éãã¾ãããã¾ãããã®ãããªã¬ã¸ã¹ããªã¼ãåå¨ããã¨ãã¦ãããã®å
容㯠for()
ããã³ keyFor()
ã¡ã½ãããéããªãéããJavaScript ã®ã³ã¼ãããã¯å©ç¨ã§ãã¾ããã
Symbol.for(tokenString)
ã¡ã½ããã¯æååã®ãã¼ãåããã¬ã¸ã¹ããªã¼ããã·ã³ãã«å¤ãè¿ãã®ã«å¯¾ããSymbol.keyFor(symbolValue)
ã¯ã·ã³ãã«å¤ãåãåããããã«å¯¾å¿ããæååãã¼ãè¿ãã¾ããããããã¯éã®é¢ä¿ã«ãªããããæ¬¡ã®å¼ã¯ true
ã¨ãªãã¾ãã
Symbol.keyFor(Symbol.for("tokenString")) === "tokenString"; // true
ç»é²ã·ã³ãã«ã¯ã©ãã§ãä»»æã«ä½æã§ãããããã©ããããæååã¨ã»ã¨ãã©åãããã«åä½ãã¾ãããã®ããã䏿ã§ãããã¨ã¯ä¿è¨¼ããããã¬ãã¼ã¸ã³ã¬ã¯ã·ã§ã³ã®å¯¾è±¡ã«ããªãã¾ããããããã£ã¦ãç»é²ã·ã³ãã«ã¯ WeakMap
, WeakSet
, WeakRef
, FinalizationRegistry
ã®åãªãã¸ã§ã¯ãã§ä½¿ç¨ãããã¨ã¯ã§ãã¾ããã
Symbol
ã³ã³ã¹ãã©ã¯ã¿ã¼ã®ãã¹ã¦ã®éçããããã£ã¯ãããèªèº«ãé åãã¾ãã宿°ã®å¤ãæã£ãã·ã³ãã«ã§ãããããã¯ãã¦ã§ã«ãã¦ã³ã·ã³ãã«ãã¨å¼ã°ãã¦ãã¾ããããã㯠JavaScript ã®ç¹å®ã®çµã¿è¾¼ã¿æä½ã®ããããã³ã«ãã¨ãã¦æä¾ããã¦ãããã®ã§ãã¦ã¼ã¶ã¼ãè¨èªã®åä½ãã«ã¹ã¿ãã¤ãºãããã¨ãã§ãã¾ãã ä¾ãã°ãã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ã Symbol.hasInstance
ã¨ããååã®ã¡ã½ãããæã£ã¦ããå ´åããã®ã¡ã½ãã㯠instanceof
æ¼ç®åã使ã£ãåä½ãã¨ã³ã³ã¼ããã¾ãã
ã¦ã§ã«ãã¦ã³ã·ã³ãã«ãå°å
¥ãããåãJavaScript ã§ã¯ç¹å®ã®çµã¿è¾¼ã¿æä½ãå®è£
ããããã«é常ã®ããããã£ã使ç¨ãã¦ãã¾ãããä¾ãã°ãJSON.stringify
颿°ã¯åãªãã¸ã§ã¯ãã® toJSON()
ã¡ã½ãããå¼ã³åºããã¨ããString
颿°ã¯ãªãã¸ã§ã¯ãã® toString()
ã¡ã½ãã㨠valueOf()
ã¡ã½ãããå¼ã³åºãã¾ããããããè¨èªã«ããå¤ãã®æä½ã追å ãããã«ã¤ãã¦ãåæä½ãããã¸ãã¯ããããã£ãã«æå®ãããã¨ã¯ã徿¹äºææ§ãå£ããè¨èªã®åä½ãæ¨è«ãã«ããããå¯è½æ§ããããã¨ãåãã£ã¦ãã¾ãããã¦ã§ã«ãã¦ã³ã·ã³ãã«ã使ç¨ãããã¨ã§ãé常æååããããã£ããèªã¿åããªãé常ã®ã³ã¼ããããã«ã¹ã¿ãã¤ãºããè¦ããªããããã«ãããã¨ãã§ãã¾ãã
ã¡ã¢: 仿§æ¸ã§ã¯ãã¦ã§ã«ãã¦ã³ã·ã³ãã«ã表ãããã« @@<ã·ã³ãã«å>
ã¨ãã表è¨ã使ã£ã¦ãã¾ãããä¾ãã°ãSymbol.hasInstance
㯠@@hasInstance
ã¨è¡¨è¨ãããArray.prototype[Symbol.iterator]()
ã¡ã½ãã㯠Array.prototype[Symbol.iterator]()
ã¨å¼ã°ãã¦ãã¾ããããã®è¡¨è¨æ³ã¯ä»æ§æ¸ã§ã¯ä½¿ãããªããªãã¾ããããå¤ãææ¸ãè°è«ã§ã¯ã¾ã è¦ããããã¨ãããã¾ãã
ã¦ã§ã«ãã¦ã³ã·ã³ãã«ã¯ã¬ãã¼ã¸ã³ã¬ã¯ã·ã§ã³ã®å¯¾è±¡ã«ã¯ãªãã¾ãããåºå®ã»ããã§æä¾ãããArray.prototype
ã®ãããªçµã¿è¾¼ã¿ãªãã¸ã§ã¯ãã¨åæ§ã«ãããã°ã©ã ã®å¯¿å½ãéãã¦ä¸æã§ããããã§ããã§ããããWeakMap
ãWeakSet
ãWeakRef
ãFinalizationRegistry
ã®åãªãã¸ã§ã¯ãå
ã§ä½¿ç¨ãããã¨ãã§ãã¾ãã
Object.getOwnPropertySymbols()
ã¡ã½ããã¯ã·ã³ãã«ã®é
åãè¿ããæå®ããããªãã¸ã§ã¯ãã®ã·ã³ãã«ããããã£ãæ¢ããã¨ãã§ãã¾ãããã¹ã¦ã®ãªãã¸ã§ã¯ãã¯ã·ã³ãã«ããããã£ãæããªãç¶æ
ã§åæåãããããããªãã¸ã§ã¯ãã«ã·ã³ãã«ããããã£ãè¨å®ããªãéãããã®é
åã¯ç©ºã«ãªããã¨ã«æ³¨æãã¦ãã ããã
Symbol()
ã·ã³ãã«åã®ããªããã£ãå¤ãè¿ãã¾ããnew
ãä»ãã¦å¼ã³åºãã¨ã¨ã©ã¼ãçºçãã¾ãã
éçããããã£ã¯ãã¹ã¦ã¦ã§ã«ãã¦ã³ã·ã³ãã«ã§ãããããã®ã·ã³ãã«ã®èª¬æã§ã¯ããSymbol.hasInstance
㯠... ãæ±ºå®ããã¡ã½ããã§ããã¨ãããããªè¨èã使ã£ã¦ãã¾ãããããã¯ãªãã¸ã§ã¯ãã®ã¡ã½ããããã®ã·ã³ãã«ãã¡ã½ããåã¨ãã¦æã¤ã¨ããæå³ã§ããï¼ã¦ã§ã«ãã¦ã³ã·ã³ãã«ã¯ããããã³ã«ãã¨ãã¦æ©è½ããããï¼ãã·ã³ãã«ãã®ãã®ã®å¤ã説æãã¦ããããã§ã¯ãªããã¨ãè¦ãã¦ããã¦ãã ããã
Symbol.asyncIterator
ãªãã¸ã§ã¯ãã®æ¢å®ã®éåæã¤ãã¬ã¼ã¿ã¼ (AsyncIterator) ãè¿ãã¡ã½ããã§ããfor await...of
ãã使ç¨ããã¾ãã
Symbol.hasInstance
ã³ã³ã¹ãã©ã¯ã¿ã¼ãªãã¸ã§ã¯ãããããªãã¸ã§ã¯ããèªåã®ã¤ã³ã¹ã¿ã³ã¹ã¨ãã¦èªèãããã©ããã©ãããæ±ºå®ããã¡ã½ããã§ããinstanceof
ãã使ç¨ããã¾ãã
Symbol.isConcatSpreadable
è«çå¤ã§ããªãã¸ã§ã¯ããé
åè¦ç´ ã«å¹³å¦åããããã©ããã示ãã¾ããArray.prototype.concat()
ãã使ç¨ããã¾ãã
Symbol.iterator
ãªãã¸ã§ã¯ãã®æ¢å®ã®ã¤ãã¬ã¼ã¿ã¼ãè¿ãã¡ã½ããã§ããfor...of
ãã使ç¨ããã¾ãã
Symbol.match
æååã«å¯¾ãã¦ç
§åããã¡ã½ããã§ããããªãã¸ã§ã¯ããæ£è¦è¡¨ç¾ã¨ãã¦ä½¿ç¨ã§ãããã©ããã夿ããããã«ã使ç¨ããã¾ããString.prototype.match()
ãã使ç¨ããã¾ãã
Symbol.matchAll
æååã«å¯¾ãã¦æ£è¦è¡¨ç¾ãä¸è´ãããã®ãè¿ãã¤ãã¬ã¼ã¿ã¼ãè¿ãã¡ã½ããã§ããString.prototype.matchAll()
ãã使ç¨ããã¾ãã
Symbol.replace
æååã®ä¸ã§ä¸è´ããé¨åæååãç½®æããã¡ã½ããã§ããString.prototype.replace()
ãã使ç¨ããã¾ãã
Symbol.search
æååã®ä¸ã§æ£è¦è¡¨ç¾ã«ä¸è´ããé¨åã®ã¤ã³ããã¯ã¹ãè¿ãã¡ã½ããã§ããString.prototype.search()
ãã使ç¨ããã¾ãã
Symbol.species
æ´¾çãªãã¸ã§ã¯ãã使ããããã«ä½¿ç¨ãããã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ã§ãã
Symbol.split
æ£è¦è¡¨ç¾ã«ä¸è´ããã¤ã³ããã¯ã¹ã§æååãåå²ããã¡ã½ããã§ããString.prototype.split()
ãã使ç¨ããã¾ãã
Symbol.toPrimitive
ãªãã¸ã§ã¯ããããªããã£ãå¤ã«å¤æããã¡ã½ããã§ãã
Symbol.toStringTag
ãªãã¸ã§ã¯ãã®æ¢å®ã®èª¬æã«ä½¿ç¨ãããæååå¤ã§ããObject.prototype.toString()
ãã使ç¨ããã¾ãã
Symbol.unscopables
èªèº«ã®ããããã£åããã³ç¶æ¿ãããããããã£åããwith
ç°å¢ã®é¢é£ãããªãã¸ã§ã¯ãã®ãã¤ã³ãã£ã³ã°ããé¤å¤ããããªãã¸ã§ã¯ãå¤ã§ãã
Symbol.for()
ã°ãã¼ãã«ã·ã³ãã«ã¬ã¸ã¹ããªã¼ãããä¸ãããã key
ã§æ¢åã®ç»é²æ¸ã¿ã·ã³ãã«ãæ¤ç´¢ããè¦ã¤ããã°ãããè¿ãã¾ããè¦ã¤ãããªãå ´åã¯ãæ°ããã·ã³ãã«ã使ãããkey
ã§ç»é²ããã¾ãã
Symbol.keyFor()
æå®ãããã·ã³ãã«ã«å¯¾ãã¦ãã°ãã¼ãã«ã·ã³ãã«ã¬ã¸ã¹ããªã¼ããå ±æã·ã³ãã«ãã¼ãåå¾ãã¾ãã
ãããã®ããããã£ã¯ Symbol.prototype
ã§å®ç¾©ããã¦ããããã¹ã¦ã® Symbol
ã¤ã³ã¹ã¿ã³ã¹ã§å
±æããã¾ãã
Symbol.prototype.constructor
ãã®ã¤ã³ã¹ã¿ã³ã¹ãªãã¸ã§ã¯ãã使ããã³ã³ã¹ãã©ã¯ã¿ã¼é¢æ°ãSymbol
ã¤ã³ã¹ã¿ã³ã¹ã«ã¤ãã¦ã¯ãåæå¤ã¯ Symbol
ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ãã
Symbol.prototype.description
èªã¿åãå°ç¨ã®æååã§ãã·ã³ãã«ã®èª¬æãå ¥ãã¾ãã
Symbol.prototype[Symbol.toStringTag]
[Symbol.toStringTag]
ããããã£ã®åæå¤ã¯æåå "Symbol"
ã§ãããã®ããããã£ã¯ Object.prototype.toString()
ã§ä½¿ç¨ããã¾ãããã ããSymbol
ã«ãç¬èªã® toString()
ã¡ã½ããããããããã·ã³ãã«ã thisArg
ã¨ã㦠Object.prototype.toString.call()
ãå¼ã³åºããªãéãããã®ããããã£ã¯ä½¿ç¨ããã¾ããã
Symbol.prototype.toString()
æååã§ãã·ã³ãã«ã®èª¬æãè¿ãã¾ããObject.prototype.toString()
ã¡ã½ããããªã¼ãã¼ã©ã¤ããã¾ãã
Symbol.prototype.valueOf()
ãã®ã·ã³ãã«ãè¿ãã¾ããObject.prototype.valueOf()
ã³ã¡ã½ããããªã¼ãã¼ã©ã¤ããã¾ãã
Symbol.prototype[Symbol.toPrimitive]()
ã·ã³ãã«ãè¿ãã¾ãã
typeof
æ¼ç®åã¯ãã·ã³ãã«ãèå¥ããã®ã«å½¹ç«ã¡ã¾ãã
typeof Symbol() === "symbol";
typeof Symbol("foo") === "symbol";
typeof Symbol.iterator === "symbol";
ã·ã³ãã«ã®å夿
ã·ã³ãã«ã®å夿ãè¡ãéã«æ³¨æãã¹ãç¹ãããã¤ãããã¾ãã
TypeError
ãçºçãã¾ãã ï¼ä¾: +sym
ã sym | 0
ï¼Object(sym) == sym
㯠true
ãè¿ãã¾ããSymbol("foo") + "bar"
ã§ã¯ TypeError
ãçºçãã¾ãï¼ã·ã³ãã«ã¯æååã«å¤æã§ãã¾ããï¼ã ããã«ãããä¾ãã°ãã·ã³ãã«ããæ°ããæååããããã£åãæé»ã«ä½æããããã¨ãé²ããã¨ãã§ãã¾ããString(sym)
夿ã¯ãã·ã³ãã«ã«å¯¾ã㦠Symbol.prototype.toString()
ãå¼ã³åºãã®ã¨åæ§ã«åä½ãã¾ãããnew String(sym)
ã¯ä¾å¤ãçºçããã®ã§æ³¨æãã¦ãã ãããã·ã³ãã«ã¯ for...in
ã«ã¼ãã§ã¯åæããã¾ããã ã¾ããObject.getOwnPropertyNames()
ã¯ã·ã³ãã«ã®ãªãã¸ã§ã¯ãããããã£ãè¿ãã¾ããããObject.getOwnPropertySymbols()
ã使ç¨ãã¦åå¾ãããã¨ã¯å¯è½ã§ãã
const obj = {};
obj[Symbol("a")] = "a";
obj[Symbol.for("b")] = "b";
obj["c"] = "c";
obj.d = "d";
for (const i in obj) {
console.log(i);
}
// "c" "d"
ã·ã³ãã«ã¨ JSON.stringify()
ã·ã³ãã«ããã¼ã¨ããããããã£ã¯ãJSON.stringify()
ã使ç¨ããéã«å®å
¨ã«ç¡è¦ããã¾ãã
JSON.stringify({ [Symbol("foo")]: "foo" });
// '{}'
詳ãã㯠JSON.stringify()
ãåç
§ãã¦ãã ããã
Symbol ã©ããã¼ãªãã¸ã§ã¯ããããããã£ãã¼ã¨ãã¦ä½¿ç¨ãããå ´åããã®ãªãã¸ã§ã¯ãã¯ã©ãããããã·ã³ãã«ã«å¼·å¶çã«å¤æããã¾ãã
const sym = Symbol("foo");
const 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