js-ES 6学習ノート-Symbol

3963 ワード

1、ES 6は新しい元のデータタイプSymbolを導入し、ユニークな値を表します.これはJavaScript言語の第7種類のデータタイプで、最初の6種類はUnidefined、Null、ブール値(Boolean)、文字列(String)、数値(Number)、オブジェクト(Object)です.
2、Symbol値はSymbol関数により生成される.つまり、オブジェクトの属性名は2つのタイプがあります.一つは元々あった文字列で、もう一つはSymbolタイプです.すべての属性名はSymbolタイプに属しており、他の属性名と衝突しないことを保証できます.
3、Symbol関数の前にnewコマンドを使用してはいけません.そうでないとエラーが発生します.これは、生成されたSymbolが元のタイプの値であり、対象ではないからです.つまり、Symbol値は対象ではないので、属性を追加することはできません.基本的には、文字列に似たデータタイプです.Symbol関数は、Symbolの例についての記述を表す文字列をパラメータとして受け入れることができ、主にコンソールで表示するため、または文字列に変換する際に、比較的区別しやすい.
4、各Symbol値は等しくないので、Symbol値は識別子として使用できることを意味し、対象の属性名に使用すると、同名の属性が出現しないことを保証することができる.これは一つのオブジェクトが複数のモジュールで構成されている場合に有用で、あるキーが誤って書き換えられたり、上書きされたりするのを防ぐことができます.Symbol値が対象属性名の場合は、ポイント演算子は使用できません.オブジェクトの内部で、Symbol値を使用して属性を定義する場合、Symbol値は四角い括弧に入れなければなりません.
5、Symbolの例:魔法文字列の消去
マジック文字列とは、コードの中に複数回出現し、コードと強く結合した特定の具体的な文字列または数値をいう.スタイルの良いコードは、できるだけ魔法文字列を消去し、意味のはっきりした変数に置き換えます.
function getArea(shape, options) {
  var area = 0;

  switch (shape) {
    case 'Triangle': //      
      area = .5 * options.width * options.height;
      break;
    /* ... more code ... */
  }

  return area;
}

getArea('Triangle', { width: 100, height: 100 }); //      
上のコードの文字列「Triangle」は魔法文字列です.それは何度も現れて、コードと「強い結合」を形成して、将来の修正と維持に役立ちません.
よく使われる魔法文字列を消す方法は、変数として書き上げることです.
var shapeType = {
  triangle: 'Triangle'
};

function getArea(shape, options) {
  var area = 0;
  switch (shape) {
    case shapeType.triangle:
      area = .5 * options.width * options.height;
      break;
  }
  return area;
}

getArea(shapeType.triangle, { width: 100, height: 100 });
上記のコードでは、shapeTypeオブジェクトのtriangle属性として「Triangle」を作成して、強い結合を解除しました.
詳しく分析すれば、shapeType.triangleがどの値に等しいかは重要ではないことが分かります.他のshapeType属性の値と競合しないことを確認すればいいです.したがって、ここではSymbolの値に切り替えるのに適しています.
const shapeType = {
  triangle: Symbol()
};
上記のコードには、shapeType.triangleの値をSymbolとする以外は、修正する必要がありません.
自ら抜け出すhttp://es6.ruanyifeng.com/#docs/symbol
6、Object.getOwnPropertySymbolsの方法があり、指定されたオブジェクトのすべてのSymbol属性名を取得することができる.Object.getOwnPropertySymbols方法は、現在のオブジェクトのすべてが属性名として使用されているSymbol値である行列を返します.
他の新しいAPI、Reflect.ownKeys方法は、従来のキー名とSymbolキーを含むすべてのタイプのキー名を返すことができる.
7、時には、同じSymbol値を再利用したいです.Symbol.for方法はこの点ができます.文字列をパラメータとして受け入れて、そのパラメータを名前とするSymbol値があるかどうかを検索します.ある場合は、このSymbol値を返します.そうでない場合は、この文字列を名称とするSymbol値を新規作成して返します.Symbol.keyFor方法は、登録されたSymbolタイプ値のkeyを返す.