What's Symbol in JavaScript?
In JavaScript, a Symbol is a primitive data type that represents a unique and immutable value. It was introduced in ECMAScript 6 (ES6) and is primarily used for creating unique identifiers for object properties, ensuring that they won't collide with other property names.
Key characteristics of Symbols:
Uniqueness: Every time you create a Symbol, it produces a unique value, even if the description is the same.
Immutability: Once created, a Symbol's value cannot be changed.
Invisible in for...in loops: Symbols are not enumerable in object properties, so they don't show up in loops like for...in, Object.keys(), or JSON.stringify().
Global Registry: Symbols can optionally be registered globally, making them accessible throughout your program.
Creating a Symbol:
let symbol1 = Symbol();
let symbol2 = Symbol('description'); // Optional description for debugging
Using Symbols as Object Property Keys:
let sym = Symbol('key');
let obj = {
[sym]: 'value'
};
console.log(obj[sym]); // 'value'
Symbol.for() and Symbol.keyFor():
Symbol.for(key): Registers a symbol in a global symbol registry, or retrieves it if it already exists.
Symbol.keyFor(symbol): Returns the key of a symbol registered in the global symbol registry.
let globalSym = Symbol.for('globalKey');
let symFromRegistry = Symbol.for('globalKey');
console.log(globalSym === symFromRegistry); // true
console.log(Symbol.keyFor(globalSym)); // 'globalKey'
Use Cases:
Private properties: Symbols can be used for creating private object properties that can't easily be accessed by outside code.
Well-known Symbols: JavaScript defines some well-known symbols like Symbol.iterator, Symbol.toStringTag, etc., to customize built-in behaviors of objects (like making an object iterable).
let iterableObj = {
[Symbol.iterator]: function() {
let index = 0;
let data = ['apple', 'banana', 'cherry'];
return {
next: () => {
if (index < data.length) {
return { value: data[index++], done: false };
}
return { done: true };
}
};
}
};
for (let item of iterableObj) {
console.log(item); // 'apple', 'banana', 'cherry'
}
In summary, Symbols are used for creating unique identifiers, preventing property name clashes, and offering a way to implement more advanced behavior in JavaScript.
No comments:
Post a Comment