symbol型 (シンボル型)
JavaScriptのsymbol型はプリミティブ型の一種で、その値が一意になる値です。boolean型やnumber型は値が同じであれば、等価比較がtrue
になります。一方、シンボルはシンボル名が同じであっても、初期化した場所が違うとfalse
になります。
js
consts1 =Symbol ("foo");consts2 =Symbol ("foo");console .log (s1 ===s1 );console .log (s1 ===s2 );
js
consts1 =Symbol ("foo");consts2 =Symbol ("foo");console .log (s1 ===s1 );console .log (s1 ===s2 );
Rubyにもシンボルという名前の型があります。Rubyのシンボルは値さえ同じなら、書いてある場所が異なっても等価比較がtrue
になります。
ruby
# Rubyコードs1 = :foos2 = :foop s1 == s2 #=> true
ruby
# Rubyコードs1 = :foos2 = :foop s1 == s2 #=> true
一方、JavaScriptでは前述のとおり、シンボルを初期化した場所で決まるので、Rubyから来た方は注意してください。Rubyのシンボル的なことは、JavaScriptやTypeScriptでは文字列を用いて解決します。
シンボルの型注釈
TypeScriptでシンボルの型注釈はsymbol
を用います。
ts
consts : symbol =Symbol ();
ts
consts : symbol =Symbol ();
シンボルの用途
JavaScriptにシンボルが導入された動機は、JavaScriptの組み込みAPIの下位互換性を壊さずに新たなAPIを追加することでした。要するに、JavaScript本体をアップデートしやすくするために導入されたものです。したがって、アプリケーションを開発する場合に限っては、シンボルを駆使してコードを書く機会はそう多くはありません。