シンボル

イントロダクション

ECMAScript 2015から、symbolnumberstringのようにプリミティブのデータ型になりました。

symbolの値はSymbolコンストラクタを呼び出すことで作成されます。

シンボルは不変(immutable)で一意になります。

let sym2 = Symbol("key");
let sym3 = Symbol("key");

sym2 === sym3; // false, symbols are unique

文字列のように、シンボルはオブジェクトのプロパティのキーとして使用可能です。

let sym = Symbol();

let obj = {
    [sym]: "value"
};

console.log(obj[sym]); // "value"

また、シンボルはオブジェクトのプロパティまたはクラスメンバを宣言するために、 算出されるプロパティの宣言と組み合わせることも可能です。

const getClassNameSymbol = Symbol();

class C {
    [getClassNameSymbol](){
       return "C";
    }
}

let c = new C();
let className = c[getClassNameSymbol](); // "C"

組み込みシンボル

ユーザーが定義するシンボルに加え、周知の組み込みシンボルが存在します。 組み込みシンボルは、内部の言語挙動を表すのに使用されます。

下記はそのシンボルの一覧になります。

Symbol.hasInstance

コンストラクタのオブジェクトが、そのコンストラクタのインスタンスの1つとして、オブジェクトを認識しているかを調べるメソッドです。 instanceof演算子のセマンティクスによって呼び出されます。

Symbol.isConcatSpreadable

Array.prototype.concatによって、オブジェクトをその配列要素にフラット化する必要があることを示す真偽値の値です。

Symbol.iterator

オブジェクトのデフォルトのイテレーターを返すメソッドです。 for-of文のセマンティクスによって呼び出されます。

Symbol.match

文字列に対して正規表現を一致させる正規表現メソッドです。 String.prototype.matchメソッドによって呼び出されます。

Symbol.replace

一致した部分文字列を置換する正規表現メソッドです。 String.prototype.replaceメソッドによって呼び出されます。

Symbol.search

正規表現に一致した文字列のインデックスを返す正規表現メソッドです。 String.prototype.searchメソッドによって呼び出されます。

Symbol.species

派生オブジェクトを作成するのに使用されるコンストラクタ関数の、関数の値を持つプロパティです。

Symbol.split

正規表現に一致した箇所で文字列を分割する正規表現メソッドです。 String.prototype.split methodによって呼び出されます。

Symbol.toPrimitive

相当するプリミティブ値にオブジェクトを変換するメソッドです。 ToPrimitive抽象演算によって呼び出されます。

Symbol.toStringTag

オブジェクトのデフォルト説明文字列(default string description)の作成の中で使用される文字列の値です。 組み込みメソッドのObject.prototype.toStringによって呼び出されます。

Symbol.unscopables

自身のプロパティ名が、関連するオブジェクトの'with'環境のバインディングから取り除かれたプロパティ名であるオブジェクトです。

 Back to top

© https://github.com/Microsoft/TypeScript-Handbook

このページは、ページトップのリンク先のTypeScript-Handbook内のページを翻訳した内容を基に構成されています。 下記の項目を確認し、必要に応じて公式のドキュメントをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • ドキュメントの情報が古い可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報やより分かり易くするための追記を行っている事があります。