Symbol Datatype
Symbol
is a datatype in JS. It typically used for creating unique keys and hidden object keys in Javascript.
There are two types of symbols
- Local Symbols - They are not registered in global symbol registry and values are unique even with same descriptor.
- Global Symbols - They are registered in global symbol registry and values are not unique
global symbol registry
:The global symbol registry is a space where symbols created using Symbol.for are stored.
syntax
In Below example "john" is a descriptor and key_one and key_two are symbol.
const key_one = Symbol("john"); //local symbol
const key_two = Symbol.for("john"); //global symbol
console.log(typeof key_one) // symbol
console.log(typeof key_two); //symbol
Key difference
Descriptor of same values are not same in local symbols
As I told earlier that every symbol is unique even If descriptor is same in local symbols. Lets validate it.
app
const key_one = Symbol("john");
const key_two = Symbol("john");
key_one == key_two // false
key_one === key_two //false
Descriptor of same values are same in global symbols
const key_one = Symbol.for("foo");
const key_two = Symbol.for("foo");
console.log(key_one === key_two); //true
some facts about objects and symbols
-
symbols
are not converted into string. - You cannot access both symbols using
for...in
loop - You cannot access both symbols even with
Object.keys()
property - Every key in objects are converted into string even numbers.
- You can see all symbols of an object using
Object.getOwnPropertySymbols()
function
app
const zero = Symbol("0");
const temp = {
0:"zero",
1:"one",
[zero]:"zero",
1.1:"one one",
}
const keys = Object.keys(temp); //["0","1","1.1"]
console.log(temp[1.1]) // one one
console.log(Object.getOwnPropertySymbols(temp)) // [Symbol(0)]
how to get descriptor in Symbol.for()
Using Symbol.keyFor(symbol)
can get you descriptor of global symbols
const key_one = Symbol.for("john")
Symbol.keyFor(key_one) // "john"
typeof Symbol.keyFor(key_one) //string
Please support me on dev.to and linkedin 💜. TY😊
Top comments (0)