--- title: Symbol.for() slug: Web/JavaScript/Reference/Global_Objects/Symbol/for translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/for original_slug: Web/JavaScript/Referencia/Objetos_globales/Symbol/for ---
El método Symbol.for(key) busca símbolos existentes en el runtime global del registro de symbols con la key enviada cómo argumento y devuelve el symbol si fue encontrada. Sino, un nuevo symbol es creado en el registro global de symbols con dicha key .
Symbol.for(key);
Un Symbol existente para la key enviada si se encuentra, un nuevo Symbol creado para la key si no es encontrado.
A diferencia de Symbol(), la función Symbol.for() crea un symbol disponible el registro global de symbols.
Sin embargo, Symbol.for() no crea un nuevo symbol en cada llamada: primero chequea si existe un symbol para la key en el registro y sólo crea un nuevo symbol si la key no es encontrada.
El registro global de symbol es una lista con la siguiente estructura (inicializada vacía):
| Field name | Value |
|---|---|
| [[key]] | Un string usado como key para identifcar al símbolo. |
| [[symbol]] | El symbol que es guardado globalmente. |
Symbol.for('foo'); // crea un nuevo global symbol
Symbol.for('foo'); // devuelve el symbol creado
// El mismo symbol global, pero no localmente
Symbol.for('bar') === Symbol.for('bar'); // true
Symbol('bar') === Symbol('bar'); // false
// La key es usada en la descripción
var sym = Symbol.for('mario');
sym.toString(); // "Symbol(mario)"
Es una buena práctica agregar un prefijo a los symbols para evitar conflictos con otras librerias del código:
Symbol.for('mdn.foo');
Symbol.for('mdn.bar');
| Especificación | Estado | Comentario |
|---|---|---|
| {{SpecName('ES2015', '#sec-symbol.for', 'Symbol.for')}} | {{Spec2('ES2015')}} | Definición inicial |
| {{SpecName('ESDraft', '#sec-symbol.for', 'Symbol.for')}} | {{Spec2('ESDraft')}} |