JavaScriptのシンボル(Symbol)とは?ユニークな値を作る仕組みを学ぼう
生徒
「先生、JavaScriptのシンボルって何ですか?あまり聞いたことがなくてよくわかりません。」
先生
「シンボルはJavaScriptで使える特別なデータ型の一つで、『ユニークな値』を作るために使います。難しく聞こえるかもしれませんが、順を追って説明しますね。」
生徒
「ユニークな値って何ですか?例えばどんな時に使うんですか?」
先生
「それも含めて、これから詳しく解説していきます!」
1. シンボル(Symbol)とは?
JavaScriptのシンボル(Symbol)は、ES6(2015年)で追加された新しいデータ型です。普通の文字列や数値とは違い、絶対に他と被らない、ユニーク(唯一無二)の値を作れます。
例えると、「世界に一つだけの秘密の鍵」を作るようなイメージです。この鍵はどんなに同じ名前をつけても別物で、他の鍵と混ざることがありません。
この特別な性質があるため、プログラム内で他の値とぶつからずに特別な識別子(IDのようなもの)を作りたいときに使われます。
2. シンボルの作り方(Symbol()関数)
シンボルはSymbol()関数を使って作ります。カッコの中には説明用の文字列を入れられますが、これはあくまで目印で、シンボルのユニークさには影響しません。
const sym1 = Symbol("キー1");
const sym2 = Symbol("キー1");
console.log(sym1 === sym2); // false(別物です)
この例では、sym1とsym2は同じ説明を持っていますが、中身は別のユニークな値です。つまり、同じ説明でも別のシンボルとして認識されます。
3. シンボルが使われる場面
シンボルは特にオブジェクトのプロパティ(鍵)として使われることが多いです。オブジェクトとはデータをまとめる箱のようなもので、プロパティはその中の「名前と値のセット」です。
普通の文字列を使うと、プロパティの名前が他の部分とかぶることがあります。ですが、シンボルを使うと絶対にかぶらない名前を作れるので、他のコードと衝突しにくくなります。
const id = Symbol("id");
const user = {
name: "太郎",
[id]: 12345 // シンボルを使った特別なプロパティ
};
console.log(user.name); // 太郎
console.log(user[id]); // 12345
このように、シンボルを使うと他の人が作ったプロパティ名と重ならず、安全に特別な情報を管理できます。
4. シンボルの特徴と注意点
- シンボルはユニークなので、同じ名前でも違うものとして扱われます。
- 文字列や数値のように表示するとわかりやすくなりますが、シンボル自体は文字列に変換できません。
- オブジェクトのプロパティに使うと、for...inループなどでは表示されず、隠しプロパティのように扱えます。
- デバッグ時には
Symbol(description)の形で見えますが、中身は一意な識別子なので同じものはありません。
5. よく使われるシンボルの例(組み込みシンボル)
JavaScriptには、あらかじめ用意された特別なシンボル(組み込みシンボル)があります。たとえばSymbol.iteratorは、オブジェクトを繰り返し処理(ループ)できるようにするためのシンボルです。
const iterableObj = {
[Symbol.iterator]() {
let step = 0;
return {
next() {
step++;
if(step === 1) {
return { value: "こんにちは", done: false };
} else if(step === 2) {
return { value: "世界", done: false };
}
return { value: undefined, done: true };
}
};
}
};
for (const word of iterableObj) {
console.log(word);
}
// 実行結果:
// こんにちは
// 世界
このように、シンボルを使うとJavaScriptの仕組みを拡張できる便利な機能を作れます。
6. まとめないですが最後に
JavaScriptのシンボル(Symbol)は、ユニークな値を作りたいときに便利な新しいデータ型です。主にオブジェクトのプロパティ名として使い、他のプロパティ名と衝突しないようにするために活用します。初心者のうちは少し難しく感じるかもしれませんが、理解するとプログラムの幅が広がります。