Baseline Widely available *
Symbol
â ÑÑо вÑÑÑоеннÑй обÑекÑ, конÑÑÑÑкÑÐ¾Ñ ÐºÐ¾ÑоÑого возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение пÑимиÑивного Ñипа symbol
. Такие знаÑÐµÐ½Ð¸Ñ Ð½Ð°Ð·ÑваÑÑ ÑимволÑнÑми знаÑениÑми (Symbol value) или пÑоÑÑо Ñимволами (Symbol), иÑ
оÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð¾ÑобенноÑÑÑ Ð² Ñом, ÑÑо они гаÑанÑиÑÑÑÑ ÑникалÑноÑÑÑ. Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ ÑаÑÑо иÑполÑзÑÑÑÑÑ Ð² каÑеÑÑве ÑникалÑнÑÑ
клÑÑей обÑекÑа. Ðни не пеÑеÑекаÑÑÑÑ Ñ ÐºÐ»ÑÑами, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ Ð´ÑÑгим кодом, а Ñакже ÑкÑÑÑÑ Ð¾Ñ Ð´Ð¾ÑÑÑпа из дÑÑгого кода. ÐÑо обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ñлабой инкапÑÑлÑÑии или ÑлабÑÑ ÑоÑÐ¼Ñ ÑокÑÑÑÐ¸Ñ Ð¸Ð½ÑоÑмаÑии.
ÐаждÑй вÑзов Symbol()
гаÑанÑиÑованно возвÑаÑÐ°ÐµÑ ÑникалÑнÑй Ñимвол. ÐаждÑй вÑзов Symbol.for("key")
вÑегда бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð¾Ð´Ð¸Ð½ и ÑÐ¾Ñ Ð¶Ðµ Ñимвол Ð´Ð»Ñ Ñказанного знаÑÐµÐ½Ð¸Ñ "key"
. ÐÑи вÑзове Symbol.for("key")
оÑÑÑеÑÑвлÑеÑÑÑ Ð¿Ð¾Ð¸Ñк в глобалÑном ÑееÑÑÑе Ñимволов. ÐÑли Ñимвол найден, Ñо он возвÑаÑаеÑÑÑ, в пÑоÑивном ÑлÑÑае ÑоздаÑÑÑÑ Ð½Ð¾Ð²Ñй Ñимвол, добавлÑеÑÑÑ Ð² глобалÑнÑй ÑееÑÑÑ Ð¿Ð¾Ð´ заданнÑм клÑÑом и возвÑаÑаеÑÑÑ.
ЧÑÐ¾Ð±Ñ ÑоздаÑÑ Ð½Ð¾Ð²Ð¾Ðµ ÑимволÑное знаÑение, доÑÑаÑоÑно напиÑаÑÑ Symbol()
, Ñказав по Ð¶ÐµÐ»Ð°Ð½Ð¸Ñ ÑÑÑÐ¾ÐºÑ Ð² каÑеÑÑве опиÑаниÑ:
const sym1 = Symbol();
const sym2 = Symbol("foo");
const sym3 = Symbol("foo");
Ðод вÑÑе ÑоздаÑÑ ÑÑи новÑÑ
Ñимвола. ÐбÑаÑиÑе внимание, ÑÑо Symbol("foo")
не вÑполнÑÐµÑ Ð¿Ñиведение ÑÑÑоки "foo" к ÑимволÑ. ÐÑо вÑÑажение ÑоздаÑÑ ÐºÐ°Ð¶Ð´Ñй Ñаз новÑй Ñимвол:
Symbol("foo") === Symbol("foo"); // false
Ðод ниже Ñ Ð¾Ð¿ÐµÑаÑоÑом new
вÑÐ·Ð¾Ð²ÐµÑ Ð¸ÑклÑÑение TypeError
:
const sym = new Symbol(); // TypeError
ÐÑо ÑдеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑазÑабоÑÑиков Ð¾Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñвного обÑекÑа-обÑÑÑки Symbol
вмеÑÑо нового ÑимволÑного знаÑениÑ, но Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñм, Ñак как Ñоздание ÑвнÑÑ
обÑекÑов-обÑÑÑок Ð´Ð»Ñ Ð¿ÑимиÑивнÑÑ
Ñипов доÑÑÑпно (напÑимеÑ, new Boolean
, new String
, new Number
).
ÐÑли дейÑÑвиÑелÑно необÑ
одимо обеÑнÑÑÑ Ñимвол в обÑекÑ, можно иÑполÑзоваÑÑ ÑÑнкÑÐ¸Ñ Object()
:
const sym = Symbol("foo");
typeof sym; // "symbol"
const symObj = Object(sym);
typeof symObj; // "object"
ÐоÑколÑÐºÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ â единÑÑвеннÑй пÑимиÑивнÑй Ñип даннÑÑ
, коÑоÑÑй Ð¸Ð¼ÐµÐµÑ ÑÑÑлоÑнÑÑ Ð¸Ð´ÐµÐ½ÑиÑноÑÑÑ (Ñо еÑÑÑ Ð½ÐµÐ»ÑÐ·Ñ ÑоздаÑÑ Ð¾Ð´Ð¸Ð½ и ÑÐ¾Ñ Ð¶Ðµ Ñимвол дваждÑ), они в некоÑоÑом ÑмÑÑле ведÑÑ ÑÐµÐ±Ñ ÐºÐ°Ðº обÑекÑÑ. ÐапÑимеÑ, они Ð¿Ð¾Ð´Ð»ÐµÐ¶Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи ÑбоÑки мÑÑоÑа и поÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð³ÑÑ Ñ
ÑаниÑÑÑÑ Ð² WeakMap
, WeakSet
, WeakRef
и FinalizationRegistry
.
ÐÑиведÑннÑй вÑÑе ÑинÑакÑÐ¸Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑнкÑии Symbol()
ÑоздаÑÑ Ñимвол, знаÑение коÑоÑого бÑÐ´ÐµÑ ÑникалÑнÑм на пÑоÑÑжении вÑего вÑемени ÑÑÑеÑÑÐ²Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑогÑаммÑ. ЧÑÐ¾Ð±Ñ ÑоздаваÑÑ ÑимволÑ, доÑÑÑпнÑе в ÑазнÑÑ
ÑайлаÑ
и даже облаÑÑÑÑ
видимоÑÑи, можно иÑполÑзоваÑÑ Ð¼ÐµÑÐ¾Ð´Ñ Symbol.for()
и Symbol.keyFor()
Ð´Ð»Ñ ÑÑÑановки и полÑÑÐµÐ½Ð¸Ñ Ñимволов из глобалÑного ÑееÑÑÑа Ñимволов.
ÐбÑаÑиÑе внимание, ÑÑо «глобалÑнÑй ÑееÑÑÑ Ñимволов» â ÑÑо вÑего лиÑÑ ÐºÐ¾Ð½ÑепÑиÑ. РеализаÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ ÑооÑвеÑÑÑвоваÑÑ ÐºÐ°ÐºÐ¾Ð¹-либо внÑÑÑенней ÑÑÑÑкÑÑÑе даннÑÑ
в движке JavaScript, и даже еÑли Ñакой ÑееÑÑÑ ÑÑÑеÑÑвÑеÑ, его ÑодеÑжимое недоÑÑÑпно Ð´Ð»Ñ ÐºÐ¾Ð´Ð° JavaScript, кÑоме как ÑеÑез меÑÐ¾Ð´Ñ for()
и keyFor()
.
ÐеÑод Symbol.for(tokenString)
пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑÑоковÑй клÑÑ Ð¸ возвÑаÑÐ°ÐµÑ ÑимволÑное знаÑение из ÑееÑÑÑа, а меÑод Symbol.keyFor(symbolValue)
пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑимволÑное знаÑение и возвÑаÑÐ°ÐµÑ ÑооÑвеÑÑÑвÑÑÑий ÐµÐ¼Ñ ÑÑÑоковÑй клÑÑ. ÐаждÑй из ниÑ
ÑвлÑеÑÑÑ Ð¾Ð±ÑаÑнÑм дÑÑгомÑ, поÑÑÐ¾Ð¼Ñ ÑледÑÑÑее вÑÑажение иÑÑинно:
Symbol.keyFor(Symbol.for("tokenString")) === "tokenString"; // true
ÐоÑколÑÐºÑ Ð·Ð°ÑегиÑÑÑиÑованнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð² пÑоизволÑном меÑÑе, они ведÑÑ ÑÐµÐ±Ñ Ð¿Ð¾ÑÑи Ñак же, как ÑÑÑоки, коÑоÑÑе они обоÑаÑиваÑÑ, иÑ
ÑникалÑноÑÑÑ Ð½Ðµ гаÑанÑиÑÑеÑÑÑ Ð¾Ð½Ð¸ не Ð¿Ð¾Ð´Ð»ÐµÐ¶Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи ÑбоÑке мÑÑоÑа. ÐоÑÑÐ¾Ð¼Ñ Ð·Ð°ÑегиÑÑÑиÑованнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð½ÐµÐ»ÑÐ·Ñ Ð¸ÑполÑзоваÑÑ Ð² WeakMap
, WeakSet
, WeakRef
и FinalizationRegistry
.
ÐÑе ÑÑаÑиÑеÑкие ÑвойÑÑва конÑÑÑÑкÑоÑа Symbol
Ñами ÑвлÑÑÑÑÑ Ñимволами, знаÑение коÑоÑÑÑ
Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñ Ð²Ð¾ вÑеÑ
облаÑÑÑÑ
видимоÑÑи. Ðни назÑваÑÑÑÑ Ð¾Ð±ÑеизвеÑÑнÑми Ñимволами и ÑлÑÐ¶Ð°Ñ Â«Ð¿ÑоÑоколами» Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ
вÑÑÑоеннÑÑ
опеÑаÑий JavaScript, позволÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑм наÑÑÑаиваÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ ÑзÑка. ÐапÑимеÑ, еÑли ÑÑнкÑиÑ-конÑÑÑÑкÑÐ¾Ñ Ð¸Ð¼ÐµÐµÑ Ð¼ÐµÑод Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ Symbol.hasInstance
, Ñо его поведение бÑÐ´ÐµÑ Ñеализовано Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð¿ÐµÑаÑоÑа instanceof
.
Ðо поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑеизвеÑÑнÑÑ
Ñимволов в JavaScript иÑполÑзовалиÑÑ Ð¾Ð±ÑÑнÑе ÑвойÑÑва Ð´Ð»Ñ ÑеализаÑии опÑеделÑннÑÑ
вÑÑÑоеннÑÑ
опеÑаÑий. ÐапÑимеÑ, ÑÑнкÑÐ¸Ñ JSON.stringify
попÑÑаеÑÑÑ Ð²ÑзваÑÑ Ð¼ÐµÑод обÑекÑа toJSON()
, а ÑÑнкÑÐ¸Ñ String
вÑÐ·Ð¾Ð²ÐµÑ Ð¼ÐµÑÐ¾Ð´Ñ Ð¾Ð±ÑекÑа toString()
и valueOf()
. Ðднако по меÑе Ñого, как в ÑзÑк добавлÑеÑÑÑ Ð²ÑÑ Ð±Ð¾Ð»ÑÑе новÑÑ
опеÑаÑий, назнаÑение каждой опеÑаÑии «магиÑеÑкого ÑвойÑÑва» Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°ÑÑÑиÑÑ Ð¾Ð±ÑаÑнÑÑ ÑовмеÑÑимоÑÑÑ Ð¸ заÑÑÑдниÑÑ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑзÑка. ÐбÑеизвеÑÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÑÑ Ð½Ð°ÑÑÑойкам бÑÑÑ Â«Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ñми» Ð´Ð»Ñ Ð¾Ð±ÑÑного кода, коÑоÑÑй как пÑавило обÑаÑаеÑÑÑ ÑолÑко к ÑÑÑоковÑм ÑвойÑÑвам.
Ð MDN и дÑÑгиÑ
иÑÑоÑникаÑ
знаÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑеизвеÑÑнÑÑ
Ñимволов обознаÑаÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿ÑеÑикÑа @@
. ÐапÑимеÑ, Symbol.hasInstance
запиÑÑваеÑÑÑ ÐºÐ°Ðº @@hasInstance
. ÐÑо ÑвÑзано Ñ Ñем, ÑÑо ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð½Ðµ имеÑÑ ÑакÑиÑеÑкиÑ
лиÑеÑалÑнÑÑ
ÑоÑмаÑов, а иÑполÑзование Symbol.hasInstance
не оÑÑÐ°Ð¶Ð°ÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´ÑÑгиÑ
пÑевдонимов Ð´Ð»Ñ ÑÑÑлки на ÑÐ¾Ñ Ð¶Ðµ Ñимвол. ÐÑо поÑ
оже на ÑазниÑÑ Ð¼ÐµÐ¶Ð´Ñ Function.name
и Function
.
ÐбÑеизвеÑÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð½Ðµ Ð¿Ð¾Ð´Ð»ÐµÐ¶Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑи ÑбоÑки мÑÑоÑа, поÑколÑÐºÑ Ð¾Ð½Ð¸ вÑ
одÑÑ Ð² ÑикÑиÑованнÑй Ð½Ð°Ð±Ð¾Ñ Ð¸ ÑникалÑÐ½Ñ Ð½Ð° пÑоÑÑжении вÑего вÑемени ÑÑÑеÑÑÐ²Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑогÑаммÑ, подобно внÑÑÑенним обÑекÑам, Ñаким как Array.prototype
. ÐоÑÑÐ¾Ð¼Ñ Ð¸Ñ
Ñакже можно иÑполÑзоваÑÑ Ð² WeakMap
, WeakSet
, WeakRef
и FinalizationRegistry
.
ÐеÑод Object.getOwnPropertySymbols()
возвÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив Ñимволов и позволÑÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑимволÑнÑе ÑвойÑÑва конкÑеÑного обÑекÑа. СледÑÐµÑ Ð¾ÑмеÑиÑÑ, ÑÑо пÑи иниÑиализаÑии Ñ Ð¾Ð±ÑекÑов Ð½ÐµÑ ÑвоиÑ
ÑимволÑнÑÑ
ÑвойÑÑв, поÑÑÐ¾Ð¼Ñ ÑÑÐ¾Ñ Ð¼Ð°ÑÑив бÑÐ´ÐµÑ Ð¿ÑÑÑ, пока Ñ Ð¾Ð±ÑекÑа не бÑдÑÑ ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ ÑимволÑнÑе ÑвойÑÑва.
Symbol()
СоздаÑÑ Ð½Ð¾Ð²Ñй обÑÐµÐºÑ Symbol
. Ðе ÑвлÑеÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑоÑом в пÑивÑÑном понимании, поÑÐ¾Ð¼Ñ ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñзван ÑолÑко как обÑÑÐ½Ð°Ñ ÑÑнкÑиÑ, но не new Symbol()
.
СÑаÑиÑеÑкие ÑвойÑÑва ÑвлÑÑÑÑÑ Ð¾Ð±ÑеизвеÑÑнÑми Ñимволами. ÐÐ»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÑакиÑ
Ñимволов Ð¼Ñ Ð¸ÑполÑзÑем вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñе «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()
ÐÑÐµÑ ÑÑÑеÑÑвÑÑÑие заÑегиÑÑÑиÑованнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² глобалÑном ÑееÑÑÑе Ñимволов Ñ ÑказаннÑм клÑÑом и возвÑаÑÐ°ÐµÑ ÐµÐ³Ð¾, еÑли он найден. РпÑоÑивном ÑлÑÑае бÑÐ´ÐµÑ Ñоздан новÑй Ñимвол и заÑегиÑÑÑиÑован Ñ ÑказаннÑм клÑÑом.
Symbol.keyFor()
ÐÐ·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¾Ð±Ñий клÑÑ Ñимвола из глобалÑного ÑееÑÑÑа Ñимволов Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ñимвола.
ÐÑи ÑвойÑÑва опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð² Symbol.prototype
и еÑÑÑ Ñ Ð²ÑеÑ
ÑкземплÑÑов Symbol
.
Symbol.prototype.constructor
ФÑнкÑиÑ-конÑÑÑÑкÑоÑ, ÑоздаÑÑÐ°Ñ ÑкземплÑÑ Ð¾Ð±ÑекÑа. ÐÐ»Ñ ÑкземплÑÑов Symbol
наÑалÑнÑм знаÑением ÑвлÑеÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¾Ñ Symbol
.
Symbol.prototype.description
ÐоÑÑÑÐ¿Ð½Ð°Ñ ÑолÑко Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ ÑÑÑока Ñ Ð¾Ð¿Ð¸Ñанием Ñимвола.
Symbol.prototype[@@toStringTag]
ÐаÑалÑнÑм знаÑением ÑвойÑÑва @@toStringTag
ÑвлÑеÑÑÑ ÑÑÑока "Symbol"
. ÐÑо ÑвойÑÑво иÑполÑзÑеÑÑÑ Ð² Object.prototype.toString()
. Ðднако из-за Ñого, ÑÑо Ñ Symbol
еÑÑÑ Ñвой ÑобÑÑвеннÑй меÑод toString()
, ÑÑо ÑвойÑÑво не иÑполÑзÑеÑÑÑ ÐµÑли не бÑÐ´ÐµÑ Ð²Ñзван Object.prototype.toString.call()
Ñ Ñимволом thisArg
.
Symbol.prototype.toString()
ÐозвÑаÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ Ñ Ð¾Ð¿Ð¸Ñанием Ñимвола. ÐеÑеопÑеделÑÐµÑ Ð¼ÐµÑод Object.prototype.toString()
.
Symbol.prototype.valueOf()
ÐозвÑаÑÐ°ÐµÑ Ñимвол. ÐеÑеопÑеделÑÐµÑ Ð¼ÐµÑод Object.prototype.valueOf()
.
Symbol.prototype[@@toPrimitive]()
ÐозвÑаÑÐ°ÐµÑ Ñимвол.
typeof
Ñ Ñимволами
ÐпеÑаÑÐ¾Ñ 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
Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ Ð½Ðµ пеÑеÑиÑлÑÑÑÑÑ Ð¿Ñи иÑеÑаÑии 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()
.
Ðогда обÑекÑ-обÑÑÑка Ñимвола иÑполÑзÑеÑÑÑ Ð² каÑеÑÑве клÑÑа ÑвойÑÑва, ÑÑÐ¾Ñ Ð¾Ð±ÑÐµÐºÑ Ð¿ÑиводиÑÑÑ Ðº ÑимволÑ, коÑоÑÑй он обоÑаÑиваеÑ:
const sym = Symbol("foo");
const obj = { [sym]: 1 };
obj[sym]; // 1
obj[Object(sym)]; // Ñоже 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