با ØªÙØ¬Ù Ø¨Ù Ø®ØµÙØµÛات Ø²Ø¨Ø§ÙØ تÙÙØ§ د٠ÙÙØ¹ از Ù ÙØ¯Ø§Ø±ÙØ§Û Ø§ØµÙÛ Ù ÛâØªÙØ§ÙÙØ¯ ب٠عÙÙØ§Ù Ú©ÙÛØ¯ ÙÛÚÚ¯Û Ø´ÛØ¡Ùا Ø§Ø³ØªÙØ§Ø¯Ù Ø´ÙÙØ¯:
- ÙÙØ¹ Ø±Ø´ØªÙØ ÛØ§
- ÙÙØ¹ س٠بÙ(symbol).
در ØºÛØ± اÛÙ ØµÙØ±ØªØ اگر Ú©Ø³Û Ø§Ø² ÙÙØ¹ دÛÚ¯Ø±Û Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙØ¯Ø Ù
Ø«Ù Ø¹Ø¯Ø¯Ø Ø¨Ù ØµÙØ±Øª Ø®ÙØ¯Ú©Ø§Ø± ب٠رشت٠تبدÛÙ Ù
ÛâØ´ÙØ¯. پس obj[1] با obj["1"] Ûکسا٠است Ù obj[true] با obj["true"].
تا اÛÙØ¬Ø§ ٠ا ÙÙØ· از رشتÙâÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâکردÛÙ .
ØØ§Ù Ø¨ÛØ§ÛÛØ¯ س٠بÙâÙØ§ Ù Ú©Ø§Ø±Û Ú©Ù Ù ÛâØªÙØ§ÙÙØ¯ Ø¨Ø±Ø§Û Ù Ø§ Ø§ÙØ¬Ø§Ù دÙÙØ¯ را ببÛÙÛÙ .
س٠بÙâÙØ§ (Symbols)
ÛÚ© «س٠بÙ» ÙØ´Ø§Ù دÙÙØ¯ÙâÛ Ø´ÙØ§Ø³ÙâØ§Û Ûکتا است.
ÛÚ© Ù
ÙØ¯Ø§Ø± از اÛÙ ÙÙØ¹ Ù
ÛâØªÙØ§Ùد با Ø§Ø³ØªÙØ§Ø¯Ù از Symbol() Ø³Ø§Ø®ØªÙ Ø´ÙØ¯:
let id = Symbol();
بعد از Ø³Ø§Ø®ØªÙØ Ù ÛâØªÙØ§ÙÛ٠ب٠س٠ب٠ÛÚ© Ø³Ø±Û ØªÙØ¶ÛØØ§Øª بدÙÛÙ (ÙÙ ÚÙÛ٠ب٠آ٠اس٠س٠ب٠ÙÙ Ù ÛâÚ¯ÙÛÙØ¯)Ø Ú©Ù Ø§Ú©Ø«Ø±Ø§ Ø¨Ø±Ø§Û Ø±ÙØ¹ خطا Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâØ´ÙØ¯:
// است "id" ÛÚ© سÙ
ب٠ب٠ÙÙ
Ø±Ø§Ù ØªÙØ¶ÛØØ§Øª id
let id = Symbol("id");
س٠بÙâÙØ§ Ø¨Ø±Ø§Û Ûکتا Ø¨ÙØ¯Ù تض٠ÛÙâØ´Ø¯Ù ÙØ³ØªÙد. ØØªÛ اگر ٠ا ÚÙØ¯ س٠ب٠را با ØªÙØ¶ÛØØ§Øª Ûکسا٠بسازÛÙ Ø Ø¢ÙÙØ§ Ù ÙØ¯Ø§Ø±ÙاÛÛ Ù ØªÙØ§Ùت ÙØ³ØªÙد. ØªÙØ¶ÛØØ§Øª ÙÙØ· ÛÚ© Ø¨Ø±ÚØ³Ø¨ است ک٠رÙÛ ÚÛØ²Û ØªØ§Ø«ÛØ± ÙÙ Ûâگذارد.
Ø¨Ø±Ø§Û Ù Ø«Ø§ÙØ اÛÙØ¬Ø§ د٠س٠ب٠با ØªÙØ¶ÛØØ§Øª Ûکسا٠دارÛÙ â Ø¢ÙÙØ§ برابر ÙÛØ³ØªÙد:
let id1 = Symbol("id");
let id2 = Symbol("id");
alert(id1 == id2); // false
اگر ش٠ا با Ruby ÛØ§ زبا٠دÛÚ¯Ø±Û Ú©Ù ÛÚ© Ø¬ÙØ±Ø§ÛÛ âØ³Ù Ø¨Ùâ Ø¯Ø§Ø±Ø¯ Ø¢Ø´ÙØ§ÛÛ Ø¯Ø§Ø±ÛØ¯ â ÙØ·Ùا Ú¯Ù Ø±Ø§Ù ÙØ´ÙÛØ¯. س٠بÙâÙØ§Û Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت Ù ØªÙØ§Ùت ÙØ³ØªÙد.
Ù¾Ø³Ø Ø¨Ù Ø·ÙØ± Ø®ÙØ§ØµÙØ ÛÚ© س٠ب٠ÛÚ© Â«Ù ÙØ¯Ø§Ø± ÛÚ©ØªØ§Û Ø§ØµÙÛ» Ù٠را٠با ÛÚ© ØªÙØ¶ÛØ Ø§Ø®ØªÛØ§Ø±Û است. Ø¨ÛØ§ÛÛØ¯ ببÛÙÛ٠کجا Ù ÛâØªÙØ§ÙÛ٠از Ø¢ÙÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ .
اکثر Ù
ÙØ¯Ø§Ø±ÙØ§Û Ø¯Ø± Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت تبدÛÙ Ø¨Ù Ø±Ø´ØªÙ Ø¨Ù ØµÙØ±Øª ضÙ
ÙÛ Ø±Ø§ Ø§ÙØ¬Ø§Ù
Ù
ÛâØ¯ÙÙØ¯. Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ Ù
ا Ù
ÛâØªÙØ§ÙÛÙ
ÙØ± Ù
ÙØ¯Ø§Ø±Û را alert Ú©ÙÛÙ
Ø Ù Ø§Û٠کار Ø®ÙØ§Ùد کرد. سÙ
بÙâÙØ§ خاص ÙØ³ØªÙد. Ø¢ÙÙØ§ Ø¨Ù ØµÙØ±Øª Ø®ÙØ¯Ú©Ø§Ø± تبدÛÙ ÙÙ
ÛâØ´ÙÙØ¯.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ اÛÙ alert ÛÚ© Ø§Ø±ÙØ± را ÙÙ
Ø§ÛØ´ Ù
ÛâØ¯ÙØ¯:
let id = Symbol("id");
alert(id); // TypeError: Cannot convert a Symbol value to a string
اÛÙ Ù ÙØ¶Ùع ÛÚ© âگارد زباÙâ Ø¯Ø± برابر Ø®Ø±Ø§Ø¨Ú©Ø§Ø±Û Ú©Ø±Ø¯Ù Ø§Ø³ØªØ ÚÙ٠رشتÙâÙØ§ ٠س٠بÙâÙØ§ از پاÛÙ Ù ØªÙØ§Ùت ÙØ³ØªÙد Ù ÙØ¨Ø§Ûد Ø¨Ù ØµÙØ±Øª تصادÙÛ Ø¨Ù ÛکدÛگر تبدÛÙ Ø´ÙÙØ¯.
اگر Ù
ا ÙØ§Ùعا ÙÛØ§Ø² دارÛÙ
Ú©Ù ÛÚ© سÙ
ب٠را ÙÙ
Ø§ÛØ´ دÙÛÙ
Ø Ø¨Ø§ÛØ¯ Ø¨Ù Ø·ÙØ± ضÙ
ÙÛ ÙÙ
را٠آ٠.toString() را ÙÙ
صدا بزÙÛÙ
Ø Ù
ث٠اÛÙØ¬Ø§:
let id = Symbol("id");
alert(id.toString()); // Symbol(id)Ø ØØ§Ùا کار Ù
ÛâÚ©ÙØ¯
ÛØ§ ÙÙØ· ÙÛÚÚ¯Û symbol.description را Ø¨Ø±Ø§Û ÙÙ
Ø§ÛØ´ ØªÙØ¶ÛØØ§Øª Ø¯Ø±ÛØ§Ùت Ú©ÙÛÙ
:
let id = Symbol("id");
alert(id.description); // id
ÙÛÚÚ¯ÛâÙØ§Û «٠خÙÛ» Ø´ÛØ¡
س٠بÙâÙØ§ ب٠٠ا اÛ٠ا٠کا٠را Ù ÛâØ¯ÙÙØ¯ ک٠در ÛÚ© Ø´ÛØ¡ ÙÛÚÚ¯ÛâÙØ§Û âÙ Ø®ÙÛâ Ø¨Ø³Ø§Ø²ÛÙ Ø Ú©Ù ÙÛÚ Ú©Ø¬Ø§Û Ú©Ø¯ ÙØªÙØ§ÙØ¯ Ø¨Ù ØµÙØ±Øª تصادÙÛ Ø¨Ù Ø¢Ù Ø¯Ø³ØªØ±Ø³Û Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯ ÛØ§ آ٠را تغÛÛØ± Ø¯ÙØ¯.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ اگر Ù
ا در ØØ§Ù کار کرد٠با Ø´ÛØ¡ÙØ§Û user Ú©Ù Ù
تعÙ٠ب٠ÛÚ© شخص Ø«Ø§ÙØ« است باشÛÙ
. Ù
ا Ù
ÛâØ®ÙØ§ÙÛÙ
Ø´ÙØ§Ø³ÙâÙØ§ÛÛ Ø¨Ù Ø¢ÙÙØ§ اضاÙÙ Ú©ÙÛÙ
.
Ø¨ÛØ§ÛÛØ¯ از ÛÚ© Ú©ÙÛØ¯ س٠بÙÛ Ø¨Ø±Ø§Û Ø§Û٠کار Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ :
let user = { // ب٠ÛÚ© کد دÛگر تعÙ٠دارد
name: "John"
};
let id = Symbol("id");
user[id] = 1;
alert( user[id] ); // Ù
ÛâØªÙØ§ÙÛÙ
با Ø§Ø³ØªÙØ§Ø¯Ù سÙ
ب٠ب٠عÙÙØ§Ù Ú©ÙÛØ¯ Ø¨Ù Ø¯Ø§Ø¯Ù Ø¯Ø³ØªØ±Ø³Û Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛÙ
Ù
Ø²ÛØª Ø§Ø³ØªÙØ§Ø¯Ù از Symbol("id") Ø¨Ù Ø¬Ø§Û Ø±Ø´ØªÙ "id" ÚÛØ³ØªØ
ب٠دÙÛ٠اÛÙÚ©Ù Ø´ÛØ¡ÙØ§Û user ب٠کد دÛÚ¯Ø±Û ØªØ¹ÙÙ Ø¯Ø§Ø±ÙØ¯Ø آ٠کد ÙÙ
با Ø¢ÙÙØ§ کار Ù
ÛâÚ©ÙØ¯Ø Ù
ا ÙØ¨Ø§Ûد ÙÙ
ÛÙØ¬ÙØ±Û Ø¨Ù Ø¢Ù ÚÛØ²Û اضاÙÙ Ú©ÙÛÙ
. اÛ٠کار اÛÙ
Ù ÙÛØ³Øª. اÙ
ا ÙÙ
ÛâØªÙØ§Ù Ø¨Ù Ø·ÙØ± تصادÙÛ Ø¨Ù ÛÚ© سÙ
Ø¨Ù Ø¯Ø³ØªØ±Ø³Û Ù¾ÛØ¯Ø§ Ú©Ø±Ø¯Ø Ú©Ø¯ شخص Ø«Ø§ÙØ« Ø§ØØªÙ
Ø§ÙØ§ آ٠را ÙÙ
ÛâØ¨ÛÙØ¯Ø پس اضاÙ٠کرد٠سÙ
بÙâÙØ§ Ø¨Ù Ø´ÛØ¡ÙØ§Û user اÛÙ
٠است.
ÙÙ
ÚÙÛÙ ØªØµÙØ± Ú©ÙÛØ¯ Ú©Ù ÛÚ© اسکرÛپت دÛگر Ø¨ÙØ§ Ø¨Ù Ø¯ÙØ§ÛÙÛØ Ø¨Ø®ÙØ§Ùد Ø´ÙØ§Ø³Ù Ø®ÙØ¯Ø´ را درÙÙ user داشت٠باشد.
سپس آ٠اسکرÛپت Ù
ÛâØªÙØ§Ùد Symbol("id") Ø®ÙØ¯Ø´ را Ø¨Ø³Ø§Ø²Ø¯Ø Ù
ث٠اÛÙ:
// ...
let id = Symbol("id");
user[id] = "Ø¢ÙÙØ§ id Ù
ÙØ¯Ø§Ø±";
ÙÛÚ ØªØ¹Ø§Ø±Ø¶Û Ø¨ÛÙ Ø´ÙØ§Ø³Ù ٠ا ٠آÙÙØ§ ÙØ¬Ùد ÙØ®ÙØ§ÙØ¯ Ø¯Ø§Ø´ØªØ ÚÙ٠س٠بÙâÙØ§ ÙÙ ÛØ´Ù Ù ØªÙØ§Ùت ÙØ³ØªÙØ¯Ø ØØªÛ اگر اس٠ÛکساÙÛ Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÙØ¯.
â¦Ø§Ù
ا اگر Ù
ا از رشت٠"id" Ø¨Ù Ø¬Ø§Û Ø³Ù
Ø¨Ù Ø¨Ø±Ø§Û Ù
ÙØµÙد Ù
Ø´Ø§Ø¨Ù Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâکردÛÙ
Ø Ø¢ÙÚ¯Ø§Ù ØªØ¹Ø§Ø±Ø¶Û ÙØ¬Ùد داشت:
let user = { name: "John" };
// Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙØ¯ "id" اسکرÛپت Ù
ا از ÙÛÚÚ¯Û
user.id = "Ù
ا id Ù
ÙØ¯Ø§Ø±";
// ...Ù
ÛâØ®ÙØ§Ùد "id" ÛÚ© اسکرÛپت دÛگر ÙÙ
Ø¨ÙØ§ ب٠دÙÛÙÛ...
user.id = "Ø¢ÙÙØ§ id Ù
ÙØ¯Ø§Ø±"
// !بÙÙ
! ØªÙØ³Ø· ÛÚ© اسکرÛپت دÛگر بازÙÙÛØ³Û شد
س٠بÙâÙØ§ در ÛÚ© Ø´ÛØ¡ ÙÛØªØ±Ø§Ù
اگر Ù
ا Ø¨Ø®ÙØ§ÙÛÙ
از ÛÚ© سÙ
ب٠در Ø´ÛØ¡ ÙÛØªØ±Ø§Ù {...} Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
Ø Ø¨Ø§ÛØ¯ Ø¯ÙØ± آ٠براکت ÙØ±Ø§Ø± دÙÛÙ
.
٠ث٠اÛÙ:
let id = Symbol("id");
let user = {
name: "John",
[id]: 123 // "id": 123 ÙÙ
};
ب٠اÛ٠دÙÛÙ Ú©Ù Ù
ا ب٠Ù
ÙØ¯Ø§Ø± Ù
ØªØºÛØ± id ب٠عÙÙØ§Ù Ú©ÙÛØ¯ ÙÛØ§Ø² دارÛÙ
Ø Ù٠رشتÙâÛ âidâ.
س٠بÙâÙØ§ ØªÙØ³Ø· forâ¦in رد Ù ÛâØ´ÙÙØ¯
ÙÛÚÚ¯ÛâÙØ§Û سÙ
بÙÛ Ø¯Ø± ØÙÙÙ for..in شرکت ÙÙ
ÛâÚ©ÙÙØ¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§Ù:
let id = Symbol("id");
let user = {
name: "John",
age: 30,
[id]: 123
};
for (let key in user) alert(key); // name, age (بدÙ٠سÙ
بÙ)
// Ø¯Ø³ØªØ±Ø³Û Ù
ستÙÛÙ
از طرÛ٠سÙ
ب٠کار Ù
ÛâÚ©ÙØ¯
alert( "Ø¨Ù Ø·ÙØ± Ù
ستÙÛÙ
: " + user[id] );
ÙÙ
ÚÙÛÙ Object.keys(user) ÙÙ
Ø¢ÙÙØ§ را ÙØ§Ø¯Ûد٠Ù
ÛâÚ¯ÛØ±Ø¯. اÛÙ Ø¨Ø®Ø´Û Ø§Ø² اص٠کÙÛ Â«Ù
Ø®ÙÛâØ³Ø§Ø²Û ÙÛÚÚ¯ÛâÙØ§Û سÙ
بÙÛ» است. اگر ÛÚ© اسکرÛپت ÛØ§ کتابخاÙ٠دÛگر در Ø´ÛØ¡ Ù
ا ØÙÙÙ Ø¨Ø²ÙØ¯Ø ب٠تصادÙÛ Ø¨Ù ÙÛÚÚ¯Û Ø³Ù
بÙÛ Ù
ا Ø¯Ø³ØªØ±Ø³Û ÙØ®ÙØ§ÙØ¯ داشت.
در Ù ÙØ§Ø¨ÙØ Object.assign ÙÙ ÙÛÚÚ¯ÛâÙØ§Û رشت٠٠Ù٠س٠ب٠را Ú©Ù¾Û Ù ÛâÚ©ÙØ¯:
let id = Symbol("id");
let user = {
[id]: 123
};
let clone = Object.assign({}, user);
alert( clone[id] ); // 123
ÙÛÚ ØªÙØ§ÙØ¶Û Ø§ÛÙØ¬Ø§ ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯. طراØÛ آ٠اÛÙÚ¯ÙÙ٠است. زÙ
اÙÛ Ú©Ù Ù
ا ÛÚ© Ø´ÛØ¡ را شبÛÙâØ³Ø§Ø²Û Ù
ÛâÚ©ÙÛÙ
ÛØ§ Ø´ÛØ¡Ùا را ادغاÙ
Ù
ÛâÚ©ÙÛÙ
Ø Ù
عÙ
ÙÙØ§ Ù
ÛâØ®ÙØ§ÙÛÙ
ک٠تÙ
اÙ
ÙÛÚÚ¯ÛâÙØ§ Ú©Ù¾Û Ø´ÙÙØ¯ (شاÙ
٠سÙ
بÙâÙØ§ÛÛ Ù
ث٠id).
س٠بÙâÙØ§Û Ú¯ÙÙØ¨Ø§Ù (global)
ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ø¯ÛØ¯ÛÙ
Ø Ù
عÙ
ÙÙØ§ تÙ
اÙ
سÙ
بÙâÙØ§ Ù
ØªÙØ§Ùت ÙØ³ØªÙØ¯Ø ØØªÛ اگر اسÙ
ÛÚ©Ø³Ø§Ù Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÙØ¯. اÙ
ا گاÙÛ Ø§ÙÙØ§Øª Ù
ا Ù
ÛâØ®ÙØ§ÙÛÙ
ک٠سÙ
بÙâÙØ§Û ÙÙ
ÙØ§Ù
با ÛکدÛگر برابر Ø¨Ø§Ø´ÙØ¯. Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ ÙØ³Ù
تâÙØ§Û Ù
ختÙÙ Ø¨Ø±ÙØ§Ù
Ù Ù
ا Ù
ÛâØ®ÙØ§ÙÙØ¯ ب٠سÙ
ب٠"id" Ú©Ù ÙÛÚÚ¯Û ÛکساÙÛ Ø§Ø³Øª Ø¯Ø³ØªØ±Ø³Û Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÙØ¯.
Ø¨Ø±Ø§Û Ø¨Ø¯Ø³Øª Ø¢ÙØ±Ø¯Ù Ø¢ÙØ ÛÚ© Ø±Ø¬ÛØ³ØªØ±Û ثبت س٠ب٠گÙÙØ¨Ø§Ù ÙØ¬Ùد دارد. ٠ا Ù ÛâØªÙØ§ÙÛ٠س٠بÙâÙØ§ را درÙ٠آ٠بسازÛ٠٠بعدا Ø¨Ù Ø¢Ù Ø¯Ø³ØªØ±Ø³Û Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛÙ Ø Ù ØªØ¶Ù ÛÙ Ù ÛâÚ©ÙØ¯ Ú©Ù Ø¯Ø³ØªØ±Ø³Û ØªÚ©Ø±Ø§Ø±Û Ø¨Ø§ Ø§Ø³ØªÙØ§Ø¯Ù از ÛÚ© اس٠ب٠٠ا دÙÛÙØ§ س٠ب٠Ûکسا٠را بر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯.
Ø¨Ø±Ø§Û Ø®ÙØ§Ùد٠(ÛØ§ در ØµÙØ±Øª ÙØ§Ù
ÙØ¬Ùد Ø¨ÙØ¯ÙØ Ø³Ø§Ø®ØªÙ) ÛÚ© سÙ
ب٠از Ø±Ø¬ÛØ³ØªØ±Û Ø«Ø¨ØªØ Ø§Ø² Symbol.for(key) Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯.
اÛÙ ØµØ¯Ø§Ø²Ø¯Ù Ø±Ø¬ÛØ³ØªØ±Û ثبت Ú¯ÙÙØ¨Ø§Ù را Ø¨Ø±Ø±Ø³Û Ù
ÛâÚ©ÙØ¯Ø ٠اگر ÛÚ© سÙ
Ø¨Ù ØªÙØµÛ٠شد٠ب٠عÙÙØ§Ù key Ù
ÙØ¬Ùد Ø¨Ø§Ø´Ø¯Ø Ø¢Ù Ø±Ø§ برÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯Ø در ØºÛØ± اÛÙ ØµÙØ±Øª ÛÚ© سÙ
Ø¨Ù Ø¬Ø¯ÛØ¯ Symbol(key) Ù
ÛâØ³Ø§Ø²Ø¯ ٠آ٠را در Ø±Ø¬ÛØ³ØªØ±Û ثبت با Ø§Ø³ØªÙØ§Ø¯Ù از key Ø¯Ø§Ø¯Ù Ø´Ø¯Ù Ø°Ø®ÛØ±Ù Ù
ÛâÚ©ÙØ¯.
Ø¨Ø±Ø§Û Ù Ø«Ø§Ù:
// Ú¯ÙÙØ¨Ø§Ù Ø®ÙØ§Ùد٠از Ø±Ø¬ÛØ³ØªØ±Û ثبت
let id = Symbol.for("id"); // اگر سÙ
Ø¨Ù ÙØ¬Ùد ÙØ¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø Ø³Ø§Ø®ØªÙ Ù
ÛâØ´ÙØ¯
// Ø¯ÙØ¨Ø§Ø±Ù آ٠را Ù
ÛâØ®ÙØ§Ùد (Ø´Ø§ÛØ¯ از ÛÚ© Ø¬Ø§Û Ø¯Ûگر کد باشد)
let idAgain = Symbol.for("id");
// سÙ
ب٠ÛکساÙ
alert( id === idAgain ); // true
س٠بÙâÙØ§Û درÙÙ Ø±Ø¬ÛØ³ØªØ±Û ثبت س٠بÙâÙØ§Û Ú¯ÙÙØ¨Ø§Ù ÙØ§Ù ÛØ¯Ù Ù ÛâØ´ÙÙØ¯. اگر ٠ا ÛÚ© س٠ب٠در ØªÙ Ø§Ù Ø³Ø·Ø Ø¨Ø±ÙØ§Ù Ù Ø¨Ø®ÙØ§ÙÛ٠ک٠در ÙÙ Ù Ø¬Ø§Û Ú©Ø¯ ÙØ§Ø¨Ù دسترس باشد â Ø§Û٠س٠بÙâÙØ§ Ù ÙØ§Ø³Ø¨ ÙØ³ØªÙد.
در Ø¨Ø¹Ø¶Û Ø§Ø² زباÙâÙØ§Û Ø¨Ø±ÙØ§Ù ÙâÙÙÛØ³ÛØ Ù Ø«Ù RubyØ Ø¨Ù Ø§Ø²Ø§Û ÙØ± اس٠ÙÙØ· ÛÚ© Ø³Ù Ø¨Ù ÙØ¬Ùد دارد.
در Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±ÛÙ¾ØªØ ÙÙ Ø§ÙØ·Ùر Ú©Ù Ù ÛâØ¨ÛÙÛÙ Ø Ø¨Ø±Ø§Û Ø³Ù Ø¨ÙâÙØ§Û Ú¯ÙÙØ¨Ø§Ù اÛÙ Ù ÙØ¶Ùع صد٠٠ÛâÚ©ÙØ¯.
٠تد Symbol.keyFor
Ø¯ÛØ¯ÛÙ
Ú©Ù Ø¨Ø±Ø§Û Ø³Ù
بÙâÙØ§Û Ú¯ÙÙØ¨Ø§ÙØ Symbol.for(key) ÛÚ© سÙ
ب٠را بر اساس اسÙ
آ٠برÙ
ÛâÚ¯Ø±Ø§ÙØ¯. Ø¨Ø±Ø§Û Ø§ÙØ¬Ø§Ù
کار برعکس ÛØ¹ÙÛ Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯Ù اسÙ
بر اساس ÛÚ© سÙ
ب٠گÙÙØ¨Ø§Ù Ù
ÛâØªÙØ§ÙÛÙ
از اÛÙ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
: Symbol.keyFor(sym):
Ø¨Ø±Ø§Û Ù Ø«Ø§Ù:
// Ú¯Ø±ÙØªÙ سÙ
ب٠بر اساس اسÙ
let sym = Symbol.for("name");
let sym2 = Symbol.for("id");
// Ú¯Ø±ÙØªÙ اسÙ
بر اساس سÙ
بÙ
alert( Symbol.keyFor(sym) ); // name
alert( Symbol.keyFor(sym2) ); // id
Ù
تد Symbol.keyFor درÙÙ Ø®ÙØ¯ از Ø±Ø¬ÛØ³ØªØ±Û ثبت سÙ
ب٠گÙÙØ¨Ø§Ù Ø¨Ø±Ø§Û Ù¾ÛØ¯Ø§ کرد٠کÙÛØ¯ (key) سÙ
Ø¨Ù Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâÚ©ÙØ¯. پس Ø¨Ø±Ø§Û Ø³Ù
بÙâÙØ§Û ØºÛØ± Ú¯ÙÙØ¨Ø§Ù کار ÙÙ
ÛâÚ©ÙØ¯. اگر سÙ
ب٠گÙÙØ¨Ø§Ù ÙØ¨Ø§Ø´Ø¯Ø ÙØ§Ø¯Ø± Ø¨Ù Ù¾ÛØ¯Ø§ Ú©Ø±Ø¯Ù Ø¢Ù ÙØ®ÙØ§ÙØ¯ Ø¨ÙØ¯ Ù undefined را برÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯.
ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ú¯ÙØªÙ Ø´Ø¯Ø ÙØ± سÙ
ب٠ÙÛÚÚ¯Û description را دارد.
Ø¨Ø±Ø§Û Ù Ø«Ø§Ù:
let globalSymbol = Symbol.for("name");
let localSymbol = Symbol("name");
alert( Symbol.keyFor(globalSymbol) ); // سÙ
ب٠گÙÙØ¨Ø§Ù Øname
alert( Symbol.keyFor(localSymbol) ); // Ú¯ÙÙØ¨Ø§Ù ÙÛØ³Øª Øundefined
alert( localSymbol.description ); // name
س٠بÙâÙØ§Û Ø³ÛØ³ØªÙ Û
تعداد Ø²ÛØ§Ø¯Û Ø³Ù Ø¨Ù âØ³ÛØ³ØªÙ Ûâ ÙØ¬Ùد دارد Ú©Ù Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت درÙÙ Ø®ÙØ¯ از Ø¢ÙÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâÚ©ÙØ¯Ø ٠٠ا Ù ÛâØªÙØ§ÙÛ٠از Ø¢ÙÙØ§ Ø¨Ø±Ø§Û Ø§ÛØ¬Ø§Ø¯ تغÛÛØ±Ø§Øª Ú©ÙÚÚ© در Ø¬ÙØ¨ÙâÙØ§Û ٠تÙÙØ¹ Ø´ÛØ¡Ùا Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ .
Ø¢ÙÙØ§ در ٠شخصات زبا٠در جدÙ٠س٠بÙâÙØ§Û Ø´ÙØ§Ø®ØªÙâØ´Ø¯Ù ÙÛØ³Øª شدÙâØ§ÙØ¯:
Symbol.hasInstanceSymbol.isConcatSpreadableSymbol.iteratorSymbol.toPrimitive- â¦Ù ØºÛØ±Ù.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ Symbol.toPrimitive ب٠Ù
ا اÙ
Ú©Ø§Ù ØªÙØµÛ٠تبدÛÙ Ø´ÛØ¡ ب٠Ù
ÙØ¯Ø§Ø± اصÙÛ (primitive) را Ù
ÛâØ¯ÙØ¯. Ù
ا کاربرد آ٠را Ø¨Ù Ø²ÙØ¯Û Ù
ÛâØ¨ÛÙÛÙ
.
ش٠ا با بÙÛ٠س٠بÙâÙØ§ Ù٠ز٠اÙÛ Ú©Ù ÙÛÚÚ¯Û Ø²Ø¨Ø§Ù Ù Ø±Ø¨ÙØ· ب٠آÙÙØ§ را Ù Ø·Ø§ÙØ¹Ù Ú©ÙÛÙ Ø¢Ø´ÙØ§ Ù ÛâØ´ÙÛØ¯.
Ø®ÙØ§ØµÙ
Symbol ÛÚ© ÙÙØ¹ Ù
ÙØ¯Ø§Ø± اصÙÛ (primitive) Ø¨Ø±Ø§Û Ø´ÙØ§Ø³ÙâÙØ§Û Ûکتا است.
سÙ
بÙâÙØ§ با صدازد٠Symbol() ب٠ÙÙ
Ø±Ø§Ù ØªÙØ¶ÛØØ§Øª (اسÙ
) Ø§Ø®ØªÛØ§Ø±Û ساخت٠Ù
ÛâØ´ÙÙØ¯.
سÙ
بÙâÙØ§ ÙÙ
ÛØ´Ù Ù
ÙØ¯Ø§Ø±ÙØ§Û Ù
ØªÙØ§Ùت Ø¯Ø§Ø±ÙØ¯Ø ØØªÛ اگر اسÙ
ÛÚ©Ø³Ø§Ù Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÙØ¯. اگر Ø¨Ø®ÙØ§ÙÛÙ
ک٠سÙ
بÙâÙØ§Û ÙÙ
ÙØ§Ù
برابر Ø¨Ø§Ø´ÙØ¯Ø Ø¨Ø§ÛØ¯ از Ø±Ø¬ÛØ³ØªØ±Û ثبت Ú¯ÙÙØ¨Ø§Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
: Symbol.for(key) ÛÚ© سÙ
ب٠گÙÙØ¨Ø§Ù را با Ø§Ø³ØªÙØ§Ø¯Ù از key ب٠عÙÙØ§Ù اسÙ
برÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯ (اگر ÙÛØ§Ø² باشد آ٠را Ù
ÛâØ³Ø§Ø²Ø¯). ÚÙØ¯ Ù
رتب٠صدازد٠Symbol.for با key Ûکسا٠دÙÛÙØ§ سÙ
ب٠Ûکسا٠را برÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯.
س٠بÙâÙØ§ در Ø¯Ù Ù ÙØ±Ø¯ Ø²ÛØ§Ø¯ Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâØ´ÙÙØ¯:
-
ÙÛÚÚ¯ÛâÙØ§Û «٠خÙÛ» Ø´ÛØ¡. اگر ٠ا Ø¨Ø®ÙØ§ÙÛÙ ÛÚ© ÙÛÚÚ¯Û Ø±Ø§ درÙÙ ÛÚ© Ø´ÛØ¡ ک٠ب٠اسکرÛپت ÛØ§ کتابخاÙ٠دÛÚ¯Ø±Û âØªØ¹ÙÙ Ø¯Ø§Ø±Ø¯â Ø§Ø¶Ø§ÙÙ Ú©ÙÛÙ Ø Ù ÛâØªÙØ§ÙÛÙ ÛÚ© س٠ب٠بسازÛ٠٠از آ٠ب٠عÙÙØ§Ù Ú©ÙÛØ¯ ÙÛÚÚ¯Û Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ . ÛÚ© ÙÛÚÚ¯Û Ø³Ù Ø¨ÙÛ Ø¯Ø±
for..inÙÙ Ø§ÛØ§Ù ÙÙ ÛâØ´ÙØ¯Ø پس با ÙÛÚÚ¯ÛâÙØ§Û دÛگر Ø¨Ù Ø·ÙØ± تصادÙÛ Ø±ÙÛ Ø¢Ù ÙØ±Ø§ÛÙØ¯Û Ø§ÙØ¬Ø§Ù ÙÙ ÛâÚ¯ÛØ±Ø¯. ÙÙ ÚÙÛÙ Ø¯Ø³ØªØ±Ø³Û Ù Ø³ØªÙÛÙ Ø¨Ù Ø¢Ù ÙØ¬Ùد ÙØ¯Ø§Ø±Ø¯Ø ÚÙ٠اسکرÛپت دÛگر س٠ب٠٠ا را ÙØ¯Ø§Ø±Ø¯. پس ÙÛÚÚ¯Û Ø§Ø² Ø§Ø³ØªÙØ§Ø¯Ù ÛØ§ بازÙÙÛØ³Û تصادÙÛ Ø¯Ø± ا٠ا٠٠ÛâÙ Ø§ÙØ¯.پس ٠ا Ù ÛâØªÙØ§ÙÛ٠با Ø§Ø³ØªÙØ§Ø¯Ù از ÙÛÚÚ¯ÛâÙØ§Û س٠بÙÛØ Ø¨Ù ØµÙØ±Øª âÙ Ø®ÙÛØ§ÙÙâ ÚÛØ²Û را Ú©Ù ÙÛØ§Ø² دارÛ٠درÙÙ Ø´ÛØ¡Ùا Ù¾ÙÙØ§Ù Ú©ÙÛÙ Ø Ø§Ù Ø§ بÙÛ٠آ٠را ÙØ¨Ø§Ûد ببÛÙÙØ¯.
-
س٠بÙâÙØ§Û Ø³ÛØ³ØªÙ Û Ø²ÛØ§Ø¯Û ÙØ¬Ùد Ø¯Ø§Ø±ÙØ¯ Ú©Ù ØªÙØ³Ø· Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâØ´ÙÙØ¯ ٠با
Symbol.*ÙØ§Ø¨Ù دسترس ÙØ³ØªÙد. ٠ا Ù ÛâØªÙØ§ÙÛ٠از Ø¢ÙÙØ§ Ø¨Ø±Ø§Û ØªØºÛÛØ± Ø¨Ø¹Ø¶Û Ø§Ø² Ø±ÙØªØ§Ø±ÙØ§Û Ø¯Ø±ÙÙ Ø²Ø¨Ø§Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ . Ø¨Ø±Ø§Û Ù Ø«Ø§ÙØ بعدا در ÙÙ ÛÙ Ø¢Ù ÙØ²Ø´ ٠ا ازSymbol.iteratorØ¨Ø±Ø§Û ÙØ§Ø¨Ù ØªÚ©Ø±Ø§Ø±ÙØ§ (iterables)ØSymbol.toPrimitiveØ¨Ø±Ø§Û Ø§ÛØ¬Ø§Ø¯ تبدÛÙ Ø´ÛØ¡ Ø¨Ù Ù ÙØ¯Ø§Ø± اصÙÛ Ù ØºÛØ±Ù Ø§Ø³ØªÙØ§Ø¯Ù Ø®ÙØ§ÙÛ٠کرد.
از ÙØØ§Ø¸ ÙÙÛØ س٠بÙâÙØ§ 100% Ù Ø®ÙÛ ÙÛØ³ØªÙد. ÛÚ© ٠تد درÙÙâØ³Ø§Ø®Øª Object.getOwnPropertySymbols(obj) ÙØ¬Ùد دارد ک٠ب٠٠ا Ø§Ù Ú©Ø§Ù Ø¯Ø±ÛØ§Ùت ت٠ا٠س٠بÙâÙØ§ را Ù ÛâØ¯ÙØ¯. ÙÙ ÚÙÛÙ ÛÚ© ٠تد Ø¨Ù ÙØ§Ù Reflect.ownKeys(obj) ÙØ¬Ùد دارد ک٠ت٠ا٠کÙÛØ¯ÙØ§Û ÛÚ© Ø´ÛØ¡ ک٠شا٠٠کÙÛØ¯ÙØ§Û Ø³Ù Ø¨ÙÛ ÙÙ ÙØ³Øª را بر٠ÛâÚ¯Ø±Ø¯Ø§ÙØ¯. پس Ø¢ÙÙØ§ در ÙØ§Ùع Ù¾ÙÙØ§Ù ÙÛØ³ØªÙد. ا٠ا اکثر کتابخاÙÙâÙØ§Ø ØªÙØ§Ø¨Ø¹ درÙÙâØ³Ø§Ø®Øª Ù Ø³Ø§Ø®ØªØ§Ø±ÙØ§Û سÛÙØªÚ©Ø³ از اÛÙ Ù ØªØ¯ÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù ÙÙ ÛâÚ©ÙÙØ¯.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)