js-ES 6学習ノート-Symbol
3963 ワード
1、ES 6は新しい元のデータタイプSymbolを導入し、ユニークな値を表します.これはJavaScript言語の第7種類のデータタイプで、最初の6種類はUnidefined、Null、ブール値(Boolean)、文字列(String)、数値(Number)、オブジェクト(Object)です.
2、Symbol値は
3、
4、各Symbol値は等しくないので、Symbol値は識別子として使用できることを意味し、対象の属性名に使用すると、同名の属性が出現しないことを保証することができる.これは一つのオブジェクトが複数のモジュールで構成されている場合に有用で、あるキーが誤って書き換えられたり、上書きされたりするのを防ぐことができます.Symbol値が対象属性名の場合は、ポイント演算子は使用できません.オブジェクトの内部で、Symbol値を使用して属性を定義する場合、Symbol値は四角い括弧に入れなければなりません.
5、Symbolの例:魔法文字列の消去
マジック文字列とは、コードの中に複数回出現し、コードと強く結合した特定の具体的な文字列または数値をいう.スタイルの良いコードは、できるだけ魔法文字列を消去し、意味のはっきりした変数に置き換えます.
よく使われる魔法文字列を消す方法は、変数として書き上げることです.
詳しく分析すれば、
自ら抜け出すhttp://es6.ruanyifeng.com/#docs/symbol
6、
他の新しいAPI、
7、時には、同じSymbol値を再利用したいです.
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
を返す.