aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/javascript/reference/global_objects/symbol/for/index.html
blob: 0bf973a1d80fa215bd85bd24de74fd29776c65a5 (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
103
104
105
---
title: Symbol.for()
slug: Web/JavaScript/Reference/Global_Objects/Symbol/for
tags:
  - ECMAScript 2015
  - JavaScript
  - Method
  - Symbol
translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/for
---
<div>{{JSRef}}</div>

<p><strong><code>Symbol.for(key)</code></strong> メソッドは、引数で与えられたキーでランタイム全体のシンボルレジストリ内に存在しているシンボルを検索し、見つかった場合はそれを返します。さもなければ、新しいシンボルがこのキーでグローバルシンボルレジストリ内に生成されます。</p>

<div>{{EmbedInteractiveExample("pages/js/symbol-for.html")}}</div>

<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div>

<h2 id="Syntax" name="Syntax">構文</h2>

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

<h3 id="Parameters" name="Parameters">引数</h3>

<dl>
 <dt><code><var>key</var></code></dt>
 <dd>必須の文字列です。シンボルに対するキー(シンボルの説明のためにも使用されます)。</dd>
</dl>

<h3 id="Return_value" name="Return_value">返値</h3>

<p>見つかった場合は指定したキーを持つ既存のシンボルです。さもなければ新しいシンボルを作成して返します。</p>

<h2 id="Description" name="Description">解説</h2>

<p><code>Symbol()</code> と対照的に、<code>Symbol.for()</code> 関数はグローバルシンボルレジストリリスト内で利用可能なシンボルを生成します。<code>Symbol.for()</code> は必ずしもすべての呼び出しで新しいシンボルを生成するわけでなく、引数で与えられた <code>key</code> をもつシンボルがレジストリ内にすでに存在しているかどうか最初に調べます。存在している場合は、そのシンボルが返されます。引数で与えられたキーをもつシンボルが見つからない場合、<code>Symbol.for()</code> は新しいグローバルシンボルを生成します。</p>

<h3 id="Global_symbol_registry" name="Global_symbol_registry">グローバルシンボルレジストリ</h3>

<p>グローバルシンボルレジストリは次のレコード構造をもつリストで、値は空で初期化されます:</p>

<table class="standard-table">
 <caption>グローバルシンボルレジストリ内のレコード</caption>
 <tbody>
  <tr>
   <th>フィールド名</th>
   <th></th>
  </tr>
  <tr>
   <td>[[key]]</td>
   <td>シンボルを識別するための文字列キー。</td>
  </tr>
  <tr>
   <td>[[symbol]]</td>
   <td>グローバルに格納されているシンボル。</td>
  </tr>
 </tbody>
</table>

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

<h3 id="Using_Symbol.for" name="Using_Symbol.for">Symbol.for() の使用</h3>

<pre class="brush: js notranslate">Symbol.for('foo'); // create a new global symbol
Symbol.for('foo'); // retrieve the already created symbol

// Same global symbol, but not locally
Symbol.for('bar') === Symbol.for('bar'); // true
Symbol('bar') === Symbol('bar'); // false

// The key is also used as the description
var sym = Symbol.for('mario');
sym.toString(); // "Symbol(mario)"
</pre>

<p>グローバルシンボルキーや他の (ライブラリコードの) グローバルシンボルとの名前の衝突を避けるために、シンボルの前に接頭辞をつけると良いかもしれません。</p>

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

<h2 id="Specifications" name="Specifications">仕様書</h2>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">仕様書</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-symbol.for', 'Symbol.for')}}</td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>

<p>{{Compat("javascript.builtins.Symbol.for")}}</p>

<h2 id="See_also" name="See_also">関連情報</h2>

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