JavaScript Symbol.for() — символ із глобального реєстру
Метод Symbol.for() бере символ із глобального реєстру — і для того самого ключа завжди повертає той самий символ.
Загальний опис
Це прямо протилежно звичайному Symbol(), який щоразу створює новий, унікальний символ. Два виклики Symbol('id') дають два різні символи; два виклики Symbol.for('id') — один і той самий.
Навіщо це? Щоб різні частини коду могли домовитись про ключ, не передаючи посилання одна одній. Дві бібліотеки, два iframe, скрипт і його розширення — усі, хто знає рядок 'app.id', отримають один символ.
Реєстр глобальний на всю сторінку, тож ключі варто робити довгими й унікальними — як імена пакетів.
автор: NagarD
- Порада
-
Ключ у реєстрі — глобальний. Пиши
автор: NagarDSymbol.for('css-in-ua.state'), а неSymbol.for('state'), щоб не зіткнутись із чужою бібліотекою.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| for | 38+ | 36+ | 9+ | 25+ | 12+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| for | 38+ | yes | yes | 9+ |
Приклади
+ запропонувати свій приклад у пісочниці
Той самий символ у двох незалежних місцях коду.
// звичайний Symbol — щоразу НОВИЙ
console.log(Symbol('id') === Symbol('id')); // false
// а з реєстру — ТОЙ САМИЙ
console.log(Symbol.for('app.id') === Symbol.for('app.id')); // true
// бібліотека A
const key = Symbol.for('css-in-ua.state');
window.widget = { [key]: { open: true } };
// бібліотека B — без жодного спільного коду
const sameKey = Symbol.for('css-in-ua.state');
console.log(window.widget[sameKey]); // { open: true }
Коментарі
Коментарів ще немає — будьте першим!