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>
|