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

構文

js
Symbol()
Symbol(description)

メモ: Symbol()new 付きで呼び出すことができません。new を付けて構築しようとすると、TypeError が発生します。

引数

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

ブラウザーの互換性

関連情報