Symbol is a primitive data type of JavaScript, along with string, number, boolean, null and undefined. It was first introduced at ECMAScript 2015 (ES6) a few years ago. It has a very special data type. When you create a Symbol, its value is kept private and for internal use only. You create a Symbol by calling the global Symbol () function:
1 2 | <span class="token keyword">const</span> mySymbol <span class="token operator">=</span> <span class="token function">Symbol</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> |
Every time you call the Symbol () function, they will get a new value and this value is unique, and its value is also different from the value of other Symbols:
1 2 | <span class="token function">Symbol</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">===</span> <span class="token function">Symbol</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token comment">//false</span> |
You may pass parameters to Symbol () and be used as descriptions for the Symbol itself:
1 2 3 | console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token function">Symbol</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token comment">//Symbol()</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token function">Symbol</span> <span class="token punctuation">(</span> <span class="token string">'Some Test'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token comment">//Symbol(Some Test)</span> |
Symbols are often used to define object properties. Usually it is to avoid name conflicts between properties, because no symbols are equal. Or it can also be used to add attributes that cannot be overridden or don’t want to be recognized. For example:
1 2 3 4 5 6 7 8 9 10 11 | <span class="token keyword">const</span> <span class="token constant">NAME</span> <span class="token operator">=</span> <span class="token function">Symbol</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token keyword">const</span> person <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token punctuation">[</span> <span class="token constant">NAME</span> <span class="token punctuation">]</span> <span class="token punctuation">:</span> <span class="token string">'Flavio'</span> <span class="token punctuation">}</span> person <span class="token punctuation">[</span> <span class="token constant">NAME</span> <span class="token punctuation">]</span> <span class="token comment">//'Flavio'</span> <span class="token keyword">const</span> <span class="token constant">RUN</span> <span class="token operator">=</span> <span class="token function">Symbol</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> person <span class="token punctuation">[</span> <span class="token constant">RUN</span> <span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token string">'Person is running'</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> person <span class="token punctuation">[</span> <span class="token constant">RUN</span> <span class="token punctuation">]</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token comment">//'Person is running'</span> |
We can also access all of the Symbols assigned to an object by the method *** Object.getOwnPropertySymbols () ***.
Reference: https://flaviocopes.com/javascript-symbols/