What are javascript symbols and how can they help you?

by Janeth Kent Date: 20-12-2022 javascript


Symbols are a new primitive value introduced by ES6. Their purpose is to provide us unique identifiers. In this article, we tell you how they work, in which way they are used with JavaScript and how they can help us.

How to create symbols

To create a new symbol we will have to use its constructor:

 
const symbol = Symbol();
 

The function has an optional string parameter that acts as a description.

 
const symbol = Symbol('description');
console.log(symbol);//Symbol(description)
 

The important thing is that, even if you use the same description more than once, each symbol is unique.

 
Symbol('description') === Symbol('description');
//false
As I said before, symbols are new primitive values and have their own type. We can check this by using typeof:
 
typeof Symbol();
//symbol

Converting to symbol type

You already know that in Javascript it is possible to convert types. A big part of this is the implicit conversion, that happens when we use values of different types together:

 
console.log(1 + " added to " + 2 + " equals " + 3); 
//1 added to 2 equals 3
 

Although there are types that are compatible, this is not the case for symbols.

 
const symbol = Symbol('Hello');
symbol + 'world!';
//Uncaught TypeError: Cannot convert a Symbol value to a string
 

If you want to use symbols in this way, you will have to convert it or use the "description" property.

 
const symbol = Symbol('Hello');
console.log(`${symbol.description} world!`);
//Hello world!
 

How to use symbols

Before we dive into symbols, it goes without saying that the keys of an object could only be strings. Trying to use an object as a key for a property does not return an expected result.

 
const key = {};
const myObject = {
  [key]: 'Hello world!'
};
console.log(myObject);
/*
{
 [object Object]: 'Hello world!'
 }
 */
 

This is not the case for symbols. The ECMAScript specification states that we can use them as keys. So let's give it a try.

 
const key = Symbol();
const myObject = {
 [key]: 'Hello world!'
 };
 console.log(myObject);
 /*
 {
  Symbol(): 'Hello world!'
  }
 */
 

Even if two symbols have the same description, they will not overlap when used as keys:

 
const key = Symbol('key');
const myObject = {
 [key]: 'Hello world!'

};

console.log(myObject[key] === myObject[Symbol('key')]);

//false
 

This means that we can assign an unlimited number of unique symbols and not worry about conflicts between them.

Accessing the value

Now, the only way to access our value is to use the symbol.

 
console.log(myObject[key]); // Hello world!



There are some differences when it comes to iterating through the properties of an object with symbols. The Object.keys, Object.entries and Object.entries functions do not give us access to any values that use symbols, the same is true for a for ... in. The easiest way to iterate through them is to use the Object.getOwnPropertySymbols function.

 
const key = Symbol();
const myObject = {
 [key]: 'Hello world!'
};

Object.getOwnPropertySymbols(myObject)
  .forEach((symbol) => {
    console.log(myObject[symbol]);
 });
//Hello world!
 

Judging from the above, we can conclude that the symbols provide us with a hidden layer underneath the object, separate from the keys which are strings.

Symbols are unique... at least, most of the time.

The way to create a global symbol is to use the Symbol.for function.

 
const symbol = Symbol.for('key');
console.log(symbol === Symbol.for('key'));
//true
 

If you have doubts about whether a symbol is unique, you can use the Symbol.keyFor function. It returns the associated key if found.

 
Symbol.keyFor(
  
Symbol.for('key')
);
//key
 
Symbol.keyFor(
 Symbol('key')
);
//undefined
 

 
by Janeth Kent Date: 20-12-2022 javascript hits : 7668  
 
Janeth Kent

Janeth Kent

Licenciada en Bellas Artes y programadora por pasión. Cuando tengo un rato retoco fotos, edito vídeos y diseño cosas. El resto del tiempo escribo en MA-NO WEB DESIGN AND DEVELOPMENT.

 
 
 

Related Posts

How to use the endsWith method in JavaScript

In this short tutorial, we are going to see what the endsWith method, introduced in JavaScript ES6, is and how it is used with strings in JavaScript. The endsWith method is…

Callbacks in JavaScript

Callback functions are the same old JavaScript functions. They have no special syntax, as they are simply functions that are passed as an argument to another function. The function that receives…

How to create PDF with JavaScript and jsPDF

Creating dynamic PDF files directly in the browser is possible thanks to the jsPDF JavaScript library. In the last part of this article we have prepared a practical tutorial where I…

How to make your own custom cursor for your website

When I started browsing different and original websites to learn from them, one of the first things that caught my attention was that some of them had their own cursors,…

Node.js and npm: introductory tutorial

In this tutorial we will see how to install and use both Node.js and the npm package manager. In addition, we will also create a small sample application. If you…

How to connect to MySQL with Node.js

Let's see how you can connect to a MySQL database using Node.js, the popular JavaScript runtime environment. Before we start, it is important to note that you must have Node.js installed…

JavaScript Programming Styles: Best Practices

When programming with JavaScript there are certain conventions that you should apply, especially when working in a team environment. In fact, it is common to have meetings to discuss standards…

Difference between arrow and normal functions in JavaScript

In this tutorial we are going to see how arrow functions differ from normal JavaScript functions. We will also see when you should use one and when you should use…

JavaScript Arrow functions: What they are and how to use them

In this article we are going to see what they are and how to use JavaScript Arrow Functions, a new feature introduced with the ES6 standard (ECMAScript 6). What are Arrow…

How to insert an element into an array with JavaScript

In this brief tutorial you will learn how to insert one or more elements into an array with JavaScript. For this we will use the splice function. The splice function will not…

What is the difference between primitives types and objects in JavaScript?

In this short tutorial we are going to look at the differences between primitive types and objects in JavaScript. To start with, we're going to look at what primitive types…

How to get DOM elements with JavaScript

When you access any element of the DOM, it is usual to save it in a variable. This is something that at first might seem very simple, but if you…

We use our own and third-party cookies to improve our services, compile statistical information and analyze your browsing habits. This allows us to personalize the content we offer and to show you advertisements related to your preferences. By clicking "Accept all" you agree to the storage of cookies on your device to improve website navigation, analyse traffic and assist our marketing activities. You can also select "System Cookies Only" to accept only the cookies required for the website to function, or you can select the cookies you wish to activate by clicking on "settings".

Accept All Only sistem cookies Configuration