افشین
افشین
خواندن ۲ دقیقه·۵ سال پیش

داده Symbol در javascript

جاوا اسکریپت از هفت نوع داده اصلی(primitive) پشتیبانی می کند: string, number, bigint, boolean, null, undefined و symbol . در میان این نوع داده ها شاید کمتر در مورد Symbol شنیده باشید.

داده Symbol برای ایجاد کلید های یکتا مورد استفاده قرار گیرد و دارای متدهای استاتیک و یک ساختار object داخلی است. این نوع داده فاقد constructor می باشد و امکان استفاده از new برای ایجاد شیء symbol ممکن نمی باشد.

const symObj = new Symbol(‘chars’);

اجرای عبارت بالا سبب ایجاد خطا از نوع type می شود.

برای ایجاد کلید یکتا می توانیم از symbol به صورت زیر استفاده کنیم:

const symObj = Symbol(‘chars’);

نکته: کلیدهایی که با symbol ایجاد می شوند هرگز یکسان نخواهند بود حتی اگر رشته یکسان تعریف داده شده باشد.

Symbol(‘chars’) === Symbol(‘chars’) // print false

تعریف ویژگی خصوصی برای object

یکی از موارد استفاده از symbol آن است که می تواند برای تعریف ویژگی های خصوصی در object ها استفاده شود.

const sym1 = Symbol(“A”); const sym2 = Symbol(“B”); const sym3 = Symbol(“C”); const newObj = { “hello”: “Hello World”, [sym1]: “Hello”, [sym2]: “World”, }; newObj[sym3] = “Bye World”;

در صورت چاپ کردن متغیر newObj مقدار آن به همراه کلیدهای symbol نمایش داده می شود.

console.log(newObj); /* * hello: &quotHello World&quot * Symbol(A): &quotHello&quot * Symbol(B): &quotWorld&quot * Symbol(C): &quotBye World&quot */

چند نکته در مورد object هایی که دارای کلیدهای symbol هستند:

1- ویژگی های object که از نوع symbol هستند در Object.entries, Object.keys و سایر حلقه های تکرار همانند for...in نمایش داده نمی شوند:

console.log(Object.entries(newObj)); // (2) [“hello”, “Hello World”]

همچنین در متد JSON.stringify نیز نمایش داده نمی شوند:

console.log(JSON.stringfy(newObj)); // {“hello”: “Hello World”}


2- با استفاده از متد Object.getOwnPropertySymbols می توانیم ویژگی های object که از نوع  symbol هستند را در خروجی نمایش دهیم:

console.log(Object.getOwnPropertySymbols(newObj)); /* * (3) [Symbol(A), Symbol(B), Symbol(C)] * 0: Symbol(A) * 1: Symbol(B) * 2: Symbol(C) */


3- با استفاده از دو متد Symbol.for و Symbol.keyFor می توانیم برای رشته های همسان مورد استفاده در Symbol یک کلید یکسان تولید کنیم.

const sym1 = Symbol.for(“A”); const sym2 = Symbol.for(“A”); let newObj = {[sym1]: “Hello”}; newObj[sym2] += “ World”; console.log(newObj[sym1]); // print “Hello World”


javascriptprimitivedata typesymbolsymbol object
شاید از این پست‌ها خوشتان بیاید