From 33058f2b292b3a581333bdfb21b8f671898c5060 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:40:17 -0500 Subject: initial commit --- files/ja/glossary/symbol/index.html | 109 ++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 files/ja/glossary/symbol/index.html (limited to 'files/ja/glossary/symbol/index.html') diff --git a/files/ja/glossary/symbol/index.html b/files/ja/glossary/symbol/index.html new file mode 100644 index 0000000000..2f124346a1 --- /dev/null +++ b/files/ja/glossary/symbol/index.html @@ -0,0 +1,109 @@ +--- +title: Symbol +slug: Glossary/Symbol +tags: + - ECMAScript 2015 + - Glossary + - JavaScript + - Sharing +translation_of: Glossary/Symbol +--- +

{{Glossary("JavaScript")}} では、 Symbol は {{Glossary("Primitive", "プリミティブ値")}} です。

+ +

Symbol データ型を持つ値は「シンボル値」として見ることができます。 JavaScript の実行時環境では、シンボル値は {{jsxref("Symbol")}} 関数を呼び出すことで生成され、動的に無名の一意の値を生み出します。シンボルはオブジェクトプロパティとして使用されることがあります。

+ +

Symbol は任意で説明を持つことができますが、これはデバッグ目的のみに利用されます。

+ +

Symbol 値は固有の識別子を表します。例えば以下のように使用します。

+ +
// 二つのシンボルを同じデスクリプションで使用
+let Sym1 = Symbol("Sym")
+let Sym2 = Symbol("Sym")
+
+console.log(Sym1 === Sym2) // "false" を返す
+// シンボルは固有であることが保証されます。
+// 同じデスクリプションでたくさんのシンボルが生成されても、
+// 異なる値を持ちます。
+
+ +
+

メモ: Ruby (または他の言語) の "symbols" と呼ばれる機能をよくご存知であれば、間違えないでください。 JavaScript のシンボルは異なります。

+
+ +

Symbol 型は ECMAScript 2015 の新機能であり、 ECMAScript 5 にはシンボルに相当するものはありません。

+ +

プログラミング言語によっては、シンボルデータ型は「アトム」と呼ばれています。

+ +

シンボルは文字列に「自動変換」されない

+ +

JavaScript の大部分の値は文字列への暗黙的な返還に対応しています。例えば alert はほぼすべての値で表示することができ、動作します。シンボルは特殊です。自動変換は行われます。

+ +

例を示します。

+ +
let Sym = Symbol("Sym")
+alert(Sym)  // TypeError: Cannot convert a Symbol value to a string
+
+ +

これは混合しないための「言語ガード」で、これは文字列とシンボルが根本的に異なるため、そして他の型に変換するべきものではないためです。

+ +

本当にシンボルを表示したいのであれば、 .toString() を呼び出す必要があります。

+ +
let Sym = Symbol("Sym")
+alert(Sym.toString())  // Symbol(Sym), now it works
+ +

または、 symbol.description プロパティを使用して、ディスクリプションを取得することができます。

+ +
let _Sym = Symbol("Sym");
+
+alert(_Sym.description); // Sym
+ +

Well-known symbol

+ +

{{jsxref("Symbol")}} クラスには、 well-known symbols と呼ばれる定数があります。これらのシンボルによって、 JavaScript がオブジェクトをどのように扱うかを、プロパティキーとして使用することで構成することができます。

+ +

well-known symbol の例としては、配列風オブジェクトのための {{jsxref("Symbol.iterator")}}、文字列オブジェクトのための {{jsxref("Symbol.search")}} などがあります。

+ +

仕様書のWell-known symbol の表に挙げられているものは次の通りです。

+ + + +

グローバルシンボルレジストリ

+ +

グローバルシンボルレジストリを扱うメソッドは {{jsxref("Symbol.for()")}} and {{jsxref("Symbol.keyFor()")}} があります。これらは、グローバルシンボルテーブル(または「レジストリ」)とランタイム環境の間を仲介します。シンボルレジストリは、主に JavaScript コンパイラーインフラストラクチャが構築しており、その中の symbol の内容は、 JavaScript ランタイムインフラストラクチャでは上記のメソッド以外で扱えません。

+ +

Symbol.for("tokenString") メソッドはレジストリ内のシンボル値を返し、 Symbol.keyFor(symbolValue) メソッドはレジストリからトークンの文字列を返します。この二つは対照的で、下記の結果は true です。

+ +
Symbol.keyFor(Symbol.for("tokenString")) === "tokenString" // true
+
+ +

関連情報

+ +

一般知識

+ + + + -- cgit v1.2.3-54-g00ecf