If we want to add Object property at runtime, it chanced that we override property of original Object. Since Symbol is a unique value, using Symbol Property to prevent property from overriding.
Version
ECMAScript 2015
Override Property
let obj = {
name: 'Tom'
}
obj.name = 'Sam'
obj.name // ?
We want to add name
property dynamically, but we will override the original name
property if the property exists.
[]
let obj = {
name: 'Tom'
}
let name = Symbol ()
obj [name] = 'Sam'
obj.name // ?
obj [name] // ?
- Since Symbol is an unique value, so we can use Symbol as property name to ensure not to override existing property
- We have to use
[]
to add Symbol property
Object Spread
let obj = {
name: 'Tom'
}
let name = Symbol ()
obj = {
...obj,
[name]: 'Sam'
}
obj.name // ?
obj [name] // ?
We can also use ...
to spread original object first and []
to add Symbol property.
Object.defineProperty
let obj = {
name: 'Tom'
}
let name = Symbol ()
Object.defineProperty (obj, name, { value: 'Sam' })
obj.name // ?
obj [name] // ?
We can also use Object.defineProperty
to add Symbol property.
Conclusion
- We can’t use
.
to add Symbol property; the result isundefined