symbol / bigint symbol と bigint
最終更新:2026-10-22
symbol / bigint symbol と bigint
symbol はグローバルに一意で重複しない値を作り、オブジェクトのキーや定数の識別子に適しています。bigint は任意精度の整数を表し、number の安全な範囲を超える大きな数に使います。
| グループ | 基本型 |
|---|---|
| 種類 | 型 |
| strict モード | 不要 |
ℹ️ 説明 エディタは TypeScript を JavaScript にトランスパイルして実行します(型チェックなし)。型チェック結果は各サンプルの出力を参照してください。
📝 構文
const key = Symbol("id"); // 一意の値。"id" はただの説明
const big: bigint = 9007199254740993n; // 安全な整数範囲を超えた正確な値
⚙️ パラメータ
| Symbol(desc) | 引数は説明文(.description で読み取れます)であり、一意性には影響しません |
|---|---|
| 123n | bigint リテラルは n で終わります。BigInt(123) で変換することもできます |
戻り値:戻り値はありません。symbol/bigint は基本の型注釈です。Symbol() と BigInt() 自体は実行時の関数です。
▶ サンプル
下のコードを編集して「試す」を押すと、トランスパイル実行結果を確認できます:
出力:
false order
9007199254740994
(トランスパイル後の実行出力。同じ説明を持つ 2 つの Symbol は等しくなりません。これが「一意」の意味です)
💡 ポイント
ℹ️ 説明 Symbol("a") !== Symbol("a") です。説明は単なるラベルにすぎません。グローバルに登録して共有する symbol には Symbol.for("a") を使います。
⚠️ 注意 bigint は number と直接混ぜて計算できず(9007199254740993n + 1 はエラー)、JSON.stringify でもシリアライズできません。
💡 ヒント symbol のキーは Object.keys や for...in で列挙されないため、「内部メタデータ」を置くのに適しています。
🏷️ 関連基本型
💡 関連ケース
ケースは今後追加予定です。
📚 関連チュートリアル
❓ よくある質問
Q bigint が必要になるのはいつですか?
A 整数値が 2^53 - 1(9007199254740991)を超える場合や、正確な整数が要求される場合です。例えばスノーフレーク ID、暗号計算、分を単位とする大口金額の累計などです。範囲内であれば普通に number を使ってください。
Q symbol にはどんな実用的な用途がありますか?
A 3 つの典型的な場面があります。衝突しないオブジェクトの内部プロパティキーを追加する、モジュールレベルの一意な定数を作る、言語のプロトコルを実装する(Symbol.iterator、Symbol.asyncIterator などの well-known symbols)です。
Q 2 つの Symbol("a") は等しいですか?
A 等しくありません。毎回の Symbol() 呼び出しは全新しい値を作ります。モジュールをまたいで同じ symbol を取得するには Symbol.for("a")(グローバル登録表)を使います。同じキーに対して同じインスタンスを返します。