Symbol() コンストラクター
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.
Symbol()
関数は、シンボル型のプリミティブ値を返します。
試してみましょう
const symbol1 = Symbol();
const symbol2 = Symbol(42);
const symbol3 = Symbol("foo");
console.log(typeof symbol1);
// Expected output: "symbol"
console.log(symbol2 === 42);
// Expected output: false
console.log(symbol3.toString());
// Expected output: "Symbol(foo)"
console.log(Symbol("foo") === Symbol("foo"));
// Expected output: false
構文
引数
description
省略可-
文字列。デバッグには使用できるこのシンボルの説明ですが、シンボル自体にはアクセスできません。
例
シンボルの作成
新しいプリミティブのシンボルを作成するには、解説にあるように Symbol()
を任意の文字列とともに書きます。
js
const sym1 = Symbol();
const sym2 = Symbol("foo");
const sym3 = Symbol("foo");
上記のコードは 3 つの新しいシンボルを生成します。なお、Symbol("foo")
は "foo"
という文字列をシンボルに変換するわけではないことに注意してください。毎回新しいシンボルを生成します。
js
Symbol("foo") === Symbol("foo"); // false
new Symbol()
以下のように new
演算子を伴う構文では、 TypeError
が発生します。
js
const sym = new Symbol(); // TypeError
一般的に他のプリミティブデータ型は明示的なラッパーオブジェクトを作成することは可能ですが(例えば、 new Boolean
, new String
, new Number
)、新しいシンボル値の代わりに明示的に Symbol
ラッパーオブジェクトを作成することはできません。
本当に Symbol
のラッパーオブジェクトを生成したい場合は、 Object()
関数を使用することができます。
js
const sym = Symbol("foo");
const symObj = Object(sym);
typeof sym; // "symbol"
typeof symObj; // "object"
仕様書
Specification |
---|
ECMAScript® 2025 Language Specification # sec-symbol-constructor |