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
-
symbolsare not converted into string. - You cannot access both symbols using
for...inloop - 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)