ES6学習(9)---オブジェクト

図1に示すように、オブジェクトのプロパティ簡潔式

  プロパティの値が可変である場合には、オブジェクトの属性名と値が同じであればES6、、、あなたは簡単な文言を使用することができます

せキー=「キー」
ましょう値 =「値」
OBJせ = {キー、値}

  この方法はまた、速記プロパティすることができ

OBJ = LET { 
  メソッド(){にconsole.log( "メソッド略称" )}           
} 

// セッターとゲッターに使用 
CONSTカート= { 
  _wheels: 4。 

  ホイール(){GET 
    戻り 、この._wheelsを; 
  } 

  SETホイール(値){ 
    IF(値< この._wheels){
       スロー 新しい新しいエラー( 'の値が小さすぎる!' ); 
    } 
    この ._wheels = 値; 
  } 
}

  メソッドが使用されるコンストラクタことができないことに留意すべきである速記

 

2、プロパティ名の式

  ES6は、増加した発現を定義することができ、角括弧で囲まれただけ必要式([])引数名定義されたオブジェクトのプロパティを使用するが、簡潔の発現特性と組み合わせて使用​​することができません

1 propKey = 'FOO'せ;
 2  
3。 LET OBJ = {
 4。    [propKey]:trueに// 式が属性名を定義する
5。    [ 'A' + 'BC']:123
 。6  };
 7  // オブジェクトのメソッド名式を定義するためにも使用することができる
8。 LET OBJ = {
 9。    [ 'H' + 'ello' ](){
 10      リターン 'ハイ' ;
 11    }
 12である };
 13である 
14 obj.hello()// こんにちは
15  
16  // 単純な式で使用することはできません
17。のconst FOO =「bar」に18 CONSTバズ= {[FOO]}。

  注:式がオブジェクトのname属性の定義であるとき、それは自動的に文字列に変換されるだろう[オブジェクトのオブジェクト]

 

3、//メソッド名、新しい属性オブジェクトのメソッドの戻りに名前を付けます

  プロパティでは、この方法ではありませんが、それはセッターとゲッターの上にある場合、オブジェクト内の名前のgetおよびsetメソッド

CONST OBJ = { 
  GETのfoo(){}、
  セットFOO(X){} 
}。

obj.foo.name 
// 例外TypeError:未定義のプロパティ'name'を読み取ることができません

constの記述子を = Object.getOwnPropertyDescriptor(OBJ、 'foo'で)。

descriptor.get.name // "fooの取得" 
descriptor.set.name // "セットfooの"

  この関数は、バインドまたはバインド機能の設定の機能であれば、同じ属性名機能を持つname属性

  メソッドの名前は、シンボルのタイプ、このシンボル説明戻り値の型を使用する場合

CONST KEY1 =記号( '記述' )。
CONST KEY2 = 記号()。
せOBJ = { 
  [キー1]()、{}、
  [KEY2](){} 
}。
OBJ [キー1] .nameの// "[説明]" 
OBJ [キー2] .nameの// ""

 

4、列挙越え属性と

  オブジェクトの各プロパティは、オブジェクト(記述子)が記述されているプロパティの動作を制御する(トラバースすることができるように、変更することができ、値、設定可能)

  Object.getOwnPropertyDescriptor()メソッドでこれらの行為を取得するには

{OBJ = LET FOO:123 ;} 
Object.getOwnPropertyDescriptor(OBJ、 'FOO' //   { 
//     値:123、値// 
//     書き込み可能:trueに、//ライト
//     列挙:trueに、// CAN列挙
@     設定可能:trueに設定可能// 
//   }

 

現在、無視され4つの動作があるenumerableためにfalseプロパティが。

  • for...inループ:唯一のオブジェクトと継承された可算財産自体を通過。
  • Object.keys():全てのキーオブジェクト自体列挙可能プロパティの名前を返します。
  • JSON.stringify():のみシリアライズされたオブジェクト自体可算プロパティ。
  • Object.assign():無視するenumerableためにfalse、プロパティオブジェクト自身の列挙可能プロパティのコピーだけを。

図5に示すように、アレイと拡張演算オブジェクト(...)//ことを除い:解体ビット配列を、そしてオブジェクトが解体されたときにキーを保持します。

   OBJましょオブジェクト拡張オペレータの浅いコピーが使用対象とすることができる= {... {:1、B:2}}

   Object.assignと等価である({}、{1、B結合オブジェクトは、OBJ = {1、B:2}、...、{C:3、D 4} ... {}せすることができ:2}、{C:3、D 4});なお、前者上のオブジェクトは、同じ名前の属性をマージする場合、後者の希望

図6に示すように、チェーンオペレータが判断される(?)(ES2020新しいです)

  職場でのインターフェイスの呼び出し、エラーの間に存在しないプロパティは、したがって、ES2020新しいチェーン演算子決意する場合は、しかし、起こるマルチレイヤのプロパティ内のオブジェクトを取得します。属性は途中でどこかに存在していないが返された場合未定義  

1  // 之前写法
2 CONSTのfirstName = (メッセージ
 3    && message.body
 4    && message.body.user
 5    && message.body.user.firstName)|| 「デフォルト」6  
7   // 链判断运算符
8 CONSTのfirstName =メッセージ?.body?.user?.firstName || 'デフォルト';

 

7、ヌル演算子(ES2020新しい)(?)を判断します

  一般的なセット我々は短絡機構STR ||「文字列」を使用することをモデル変数のデフォルト値は、strの変数があるが「」、0、ヌル、未定義、デフォルト値はfalseが割り当てられます、もし、変数がnullと定義されていない場合にのみ、とき、あなたはこの方法を使用することはできません、デフォルト値を使用します。

  したがってES2020は、変数の値がnullまたは未定義である場合にのみ、デフォルト値が割り当てられる、ヌル演算判定を追加しました

constのheaderText = response.settings.headerText?'こんにちは世界!' ; 

constのanimationDuration = response.settings.animationDuration?300 ; 

constのShowSplashScreenを = response.settings.showSplashScreen? ;

  なお、論理演算子を使用する必要があり()が複数使用される場合は、そうでなければエラーを優先を示す場合

 

おすすめ

転載: www.cnblogs.com/newttt/p/12601636.html