--- 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')}} |