aboutsummaryrefslogtreecommitdiff
path: root/files/es/web/javascript/reference/global_objects/symbol/for/index.html
blob: 969e0e06dfa5079105fcbfd1bb40f381988f9a3a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
---
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
---
<div>{{JSRef}}</div>

<p>El método <code><strong>Symbol.for(key)</strong></code> busca símbolos existentes en el runtime global del registro de <em>symbols</em> con la <code>key</code> enviada cómo argumento y devuelve el symbol si fue encontrada. Sino, un nuevo symbol es creado en el registro global de <em>symbols </em>con dicha <code>key</code> .</p>

<h2 id="Syntax">Syntax</h2>

<pre class="syntaxbox"><var>Symbol.for(key)</var>;</pre>

<h3 id="Parámetros">Parámetros</h3>

<dl>
 <dt>key</dt>
 <dd>String, requirido. La <em>key </em>para el símbolo (y también usada para la descripción del <em>Symbol</em>).</dd>
</dl>

<h3 id="Valor_de_retorno">Valor de retorno</h3>

<p>Un <em>Symbol </em>existente para la <em>key </em>enviada si se encuentra, un nuevo <em>Symbol</em> creado para la <em>key </em>si no es encontrado.</p>

<h2 id="Descripción">Descripción</h2>

<p>A diferencia de <code>Symbol()</code>,  la función <code>Symbol.for()</code> crea un symbol disponible el registro global de symbols.</p>

<p>Sin embargo, <code>Symbol.for()</code> no crea un nuevo symbol en cada llamada: primero chequea si existe un symbol para la <code>key</code> en el registro y sólo crea un nuevo symbol si la <code>key</code> no es encontrada.</p>

<p>El registro global de symbol es una lista con la siguiente estructura (inicializada vacía):</p>

<table class="standard-table">
 <caption>Estructura registro global de symbol</caption>
 <tbody>
  <tr>
   <th>Field name</th>
   <th>Value</th>
  </tr>
  <tr>
   <td>[[key]]</td>
   <td>Un string usado como key para identifcar al símbolo.</td>
  </tr>
  <tr>
   <td>[[symbol]]</td>
   <td>El symbol que es guardado globalmente.</td>
  </tr>
 </tbody>
</table>

<h2 id="Examples">Examples</h2>

<pre class="brush: js">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)"
</pre>

<p>Es una buena práctica agregar un prefijo a los symbols para evitar conflictos con otras librerias del código:</p>

<pre class="brush: js">Symbol.for('mdn.foo');
Symbol.for('mdn.bar');
</pre>

<h2 id="Especificaciones">Especificaciones</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Especificación</th>
   <th scope="col">Estado</th>
   <th scope="col">Comentario</th>
  </tr>
  <tr>
   <td>{{SpecName('ES2015', '#sec-symbol.for', 'Symbol.for')}}</td>
   <td>{{Spec2('ES2015')}}</td>
   <td>Definición inicial</td>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-symbol.for', 'Symbol.for')}}</td>
   <td>{{Spec2('ESDraft')}}</td>
   <td> </td>
  </tr>
 </tbody>
</table>

<h2 id="Compatibilidad_entre_exploradores">Compatibilidad entre exploradores</h2>

{{Compat("javascript.builtins.Symbol.for")}}

<h2 id="Ver_también">Ver también</h2>

<ul>
 <li>{{jsxref("Symbol.keyFor()")}}</li>
</ul>