フロント
1.ES6は、新しいプリミティブデータ型の記号を紹介するユニークな値を表します。
関数によって生成されたシンボル2.Symbol値。
項目記号は実施例の説明、コンソールディスプレイの主な目的を表し、または文字列に変換するとき、比較的容易に区別するよう3.Symbol関数は、文字列を取ることができます。
4.ES2019は属性記述、ダイレクトリターン記号の記述の例を提供します。
5.Symbol値は、シンボル値は、オブジェクトの属性名の識別子として使用することができ、我々は同じ名前のプロパティが表示されない保証することができることを意味、同じではありません。
使用するオブジェクトのname属性としてではなく、ドットオペレータによる6.Symbol値[]
。
場合は、プロパティ名、プロパティまたはパブリックプロパティではなく、私有財産として7.Symbol値。
let s = Symbol();
let obj = {
[s]: function (arg) { ... }
};
obj[s](123);
一般的なシーン
これは、一定の設定値が等しくないことを保証するために、定数のセットを定義します
DEMO1
const log = {};
log.levels = {
DEBUG: Symbol('debug'),
INFO: Symbol('info'),
WARN: Symbol('warn')
};
console.log(log.levels.DEBUG, 'debug message');
console.log(log.levels.INFO, 'info message');
DEMO2
const COLOR_RED = Symbol();
const COLOR_GREEN = Symbol();
function getComplement(color) {
switch (color) {
case COLOR_RED:
return COLOR_GREEN;
case COLOR_GREEN:
return COLOR_RED;
default:
throw new Error('Undefined color');
}
}
一定の値の記号を使用しての最大の利点は、あなたが設計通りに、上記のステートメントが動作することを保証するために切り替えることができますので、他の値は、同じ値を持つことができないです。
オブジェクトのキー属性として、オブジェクト属性を防ぐために書き換えられ
let name = Symbol();
{
plugin = {};
plugin[name] = 'plugin';
console.log(plugin[name]); //plugin
}
{
let name = Symbol();
plugin[name] = 'user';
console.log(plugin[name]); //user
}
console.log(plugin) //{Symbol(): "plugin", Symbol(): "user"}
console.log(plugin[name]); //plugin