Symbol.for()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.

El método Symbol.for(key) busca los símbolos existentes en un registro de símbolos en tiempo de ejecución con la clave dada y lo devuelve si lo encuentra. En caso contrario, se crea un nuevo símbolo en el registro global de símbolos con esta clave.

Pruébalo

console.log(Symbol.for("bar") === Symbol.for("bar"));
// Expected output: true

console.log(Symbol("bar") === Symbol("bar"));
// Expected output: false

const symbol1 = Symbol.for("foo");

console.log(symbol1.toString());
// Expected output: "Symbol(foo)"

Sintaxis

js
Symbol.for(key);

Parametros

key

String, obligatoria. La clave del símbolo (y también se utiliza para la descripción del símbolo).

Valor de retorno

Un símbolo existente con la clave dada si se encuentra; en caso contrario, se crea un nuevo símbolo y se devuelve.

Descripción

A diferencia de Symbol(), la función Symbol.for() crea un símbolo disponible en una lista global de registro de símbolos. Además, Symbol.for() no crea necesariamente un nuevo símbolo en cada llamada, sino que comprueba primero si un símbolo con la key dada ya está presente en el registro. En ese caso, se devuelve ese símbolo. Si no se encuentra ningún símbolo con la clave dada, Symbol.for() creará un nuevo símbolo global.

Registro mundial de símbolos

El registro global de símbolos es una lista con la siguiente estructura de registros y se inicializa vacía:

Nombre del campo Valor
[[key]] Una clave de cadena utilizada para identificar un símbolo.
[[symbol]] Un símbolo que se almacena globalmente.

Ejemplos

Uso de Symbol.for()

js
Symbol.for("foo"); // crear un nuevo símbolo global
Symbol.for("foo"); // obtener el símbolo ya creado

// El mismo símbolo global, pero no localmente
Symbol.for("bar") === Symbol.for("bar"); // true
Symbol("bar") === Symbol("bar"); // false

// La clave también se utiliza como descripción
const sym = Symbol.for("mario");
sym.toString(); // "Symbol(mario)"

Para evitar conflictos de nombres con sus claves de símbolos globales y otros símbolos globales (del código de la biblioteca), puede ser una buena idea poner un prefijo a sus símbolos:

js
Symbol.for("mdn.foo");
Symbol.for("mdn.bar");

Especificaciones

Specification
ECMAScript® 2025 Language Specification
# sec-symbol.for

Compatibilidad con navegadores

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
for

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

Véase también