シンボル
イントロダクション
ECMAScript 2015から、symbol
はnumber
とstring
のようにプリミティブのデータ型になりました。
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'環境のバインディングから取り除かれたプロパティ名であるオブジェクトです。
© https://github.com/Microsoft/TypeScript-Handbook
このページは、ページトップのリンク先のTypeScript-Handbook内のページを翻訳した内容を基に構成されています。 下記の項目を確認し、必要に応じて公式のドキュメントをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。
- ドキュメントの情報が古い可能性があります。
- "訳注:"などの断わりを入れた上で、日本人向けの情報やより分かり易くするための追記を行っている事があります。