It seems like you are using an ad blocker. To enhance your experience and support our website, please consider:

  1. Signing in to disable ads on our site.
  2. Sign up if you don't have an account yet.
  3. Or, disable your ad blocker by doing this:
    • Click on the ad blocker icon in your browser's toolbar.
    • Select "Pause on this site" or a similar option for lancecourse.com.

Javascript in 100 bits

Course by zooboole,

Last Updated on 2025-01-28 08:04:00

Lesson 86 - JavaScript Global Symbols with Symbol.for()

JavaScript provides a global symbol registry through the Symbol.for() method. This allows symbols to be shared across different parts of code, even across different files or modules.


What is Symbol.for()?

  • Symbol.for(key) searches the global symbol registry for a symbol with the given key.
  • If it exists, it returns that symbol.
  • If it does not exist, it creates a new symbol and registers it globally with the given key.
const globalSym1 = Symbol.for("app.id");
const globalSym2 = Symbol.for("app.id");

console.log(globalSym1 === globalSym2); // true

Unlike Symbol("desc"), which always creates a new symbol, Symbol.for("key") reuses a symbol if it already exists in the global registry.


Why Use Symbol.for()?

  • Sharing symbols across modules or scopes
  • Avoiding duplication when defining constants
  • Creating a global contract for special property names

Retrieving the Key from a Global Symbol

You can retrieve the key (description) of a global symbol using Symbol.keyFor():

const sym = Symbol.for("user.token");

console.log(Symbol.keyFor(sym)); // "user.token"

Note: This works only with global symbols created using Symbol.for().


Symbol() vs Symbol.for()

Feature Symbol() Symbol.for()
Always unique? Yes No (shared via key)
Global registry? No Yes
Key retrievable? No Yes (Symbol.keyFor())
Use case Private/internal symbols Shared/registered symbols

Use Case Example

// In module A
const auth = Symbol.for("app.auth");

// In module B
const token = Symbol.for("app.auth");

console.log(auth === token); // true

Summary

  • Symbol.for() checks the global registry for existing keys.
  • It enables reuse of symbols globally.
  • Use Symbol.keyFor() to retrieve the key for global symbols.
  • Ideal for shared constants and avoiding key collisions in large apps.

Try Your Hand

Task:
Use Symbol.for() to create a global symbol for a property called "theme.color". Set a value using this symbol as a key in an object and retrieve it.

// Your solution here