12

The new primitive type comes with ES6 which is Symbol type.The short definition says :

A symbol is a unique and immutable data type and may be used as an identifier for object properties. The symbol object is an implicit object wrapper for the symbol primitive data type.

I did some research but I cannot understand why we need this primitive type exactly?

Thank you for your answers.

Felix Kling
  • 795,719
  • 175
  • 1,089
  • 1,143
BCRK
  • 161
  • 1
  • 1
  • 5
  • 2
    more (better) duplicates: [What is the point of the 'Symbol' type in ECMA-262-v6?](http://stackoverflow.com/q/30919170/1048572), [Why bring symbols to javascript?](http://stackoverflow.com/q/21724326/1048572) – Bergi Apr 22 '16 at 15:08

1 Answers1

19

This primitive type is useful for so-called "private" and/or "unique" keys.

Using a symbol, you know no one else who doesn't share this instance (instead of the string) will not be able to set a specific property on a map.

Example without symbols:

var map = {};
setProp(map);
setProp2(map);

function setProp(map) {
  map.prop = "hey";
}
function setProp2(map) {
  map.prop = "hey, version 2";
}

In this case, the 2nd function call will override the value in the first one.

However, with symbols, instead of just using "the string prop", we use the instance itself:

var map = {};
var symbol1 = Symbol("prop");
var symbol2 = Symbol("prop"); // same name, different instance – so it's a different symbol!
map[symbol1] = 1;
map[symbol2] = 2; // doesn't override the previous symbol's value
console.log(map[symbol1] + map[symbol2]); // logs 3
Ven
  • 19,015
  • 2
  • 41
  • 61