ES6 - シンボルはじめに

 ES6 - シンボルはじめに

    まず、シンボルは何ですか?

SymbolES6新たに導入された基本データ型。

Symbol()関数は、静的プロパティと静的メソッドを有するタイプのシンボル・タイプの値を返します。:グローバル登録記号、および組み込みオブジェクトのクラスに類似を公開しますそれは静的メソッドですが、それは構文をサポートしていないので、それのコンストラクタは完了していないとして、それは性質がいくつかの組み込みのオブジェクトのメンバーにさらされる静的ですnew Symbol()

    シンボルは、2つの変数を備えています

    1、Symbol新しい基本データ型として、我々が使用することができます:変数の型を、それが今でユニークです。let a = Symbol();定义Symbol

let b = Symbol();
a = = = b; //false

    2、それはパラメータを受け入れることができ、我々は2つの文字列が同一であってもよい場合でも、文字列の記述としてそれを渡すことができます。引数がオブジェクトである場合、それは最初のオブジェクトの呼び出しますtoString文字列を変換する方法を。

 let symbol1 = Symbol('some');

let symbol2 = Symbol('some'); symbol1 === symbol2; //false

図3は、すべてのことを意味してSymbol作成された値が同じではありません。あなたが使用することはできませんnew作成する方法を:
let c = new Symbol(); //TypeError: Symbol is not a constructor 

    第三に、なぜべき記号の導入

    1、オブジェクトにプロパティを増やすことができます

     ではES5、主に文字列のオブジェクトの前に属性名、名前は困難な作業であり、そしてすべてのに複数の名前が間違いを繰り返すように回します。そして、時には私たちは財産を増やすオブジェクトの1つを与えるために、他の誰かのコードを取り、我々はされ、名前が繰り返されていないのか分からないES6に導入されたSymbol根本的な原因。

let name = Symbol('name'); //加入 name 作为描述 let obj = { [name]: 'Baoyuan' //必须放在方括号之中 }; obj[name]; //'Baoyuan' 
    2、プロパティ名を横断

     共通の属性をオブジェクト、我々は使用することができObject.keys()for...inまたはObject.getOwnPropertyNames()横断するが、彼らは行き来することができないSymbol属性名のタイプを。それは私有財産ではないことに注意してください。我々は使用することができObject.getOwnPropertySymbols、指定されたオブジェクトを取得する方法をSymbol属性。それはすべての現在のオブジェクト返すSymbolプロパティタイプSymbol値の配列を:

let a = Symbol('a');
let b = Symbol('b'); let c = 'c'; let obj = { [a]: 'a', [b]: 'b', c: 'c' }; let objNames = Object.getOwnPropertySymbols(obj); console.log(objNames); // [Symbol(a), Symbol(b)] let objName = Object.getOwnPropertyNames(obj); console.log(objName); // ["c"] 

     使用するReflect.ownKeys属性名のすべてを通過することができます:

let names = Reflect.ownKeys(obj);
console.log(names); // ["c", Symbol(a), Symbol(b)] 
  図3に示すように、反復参照値シンボル

   時々 、新しいSymbol私たちは同じ記述子が同じ値を持っていない場合でも、もう一度、この時間を利用したい他の場所での値、そして私たちが必要としますSymbol.for()

let a = Symbol.for('hello');
let b = Symbol.for('hello'); a === b; // true 

  実際には、これらの二つは、新たな文言を持っていますSymbolが、違いはSymbol、新しい値を生成するために、常に、そしてSymbol.for与えられた場合には最初に表示されますkey値が存在し、新に行くために存在していない、地球環境に登録されます検索のために。我々は使用することができSymbol.keyFor、登録見ることSymbolの価値をkey

 Symbol.keyFor(a); // "hello"

 

参考リンクします。https://www.jianshu.com/p/971996a7471f

おすすめ

転載: www.cnblogs.com/qing-5/p/11434001.html