Es6-objects
ES6-オブジェクト
JavaScriptはデータ型の拡張をサポートしています。 JavaScriptオブジェクトは、カスタムデータ型を定義する優れた方法です。
- オブジェクト*は、キーと値のペアのセットを含むインスタンスです。 プリミティブデータ型とは異なり、オブジェクトは複数の値または複雑な値を表すことができ、ライフタイムにわたって変化することがあります。 値は、スカラー値または関数、または他のオブジェクトの配列です。
オブジェクトを定義するための構文のバリエーションについては、さらに説明します。
オブジェクト初期化子
プリミティブ型と同様に、オブジェクトにはリテラル構文があります:*中括弧v *(\ {and})。 以下は、オブジェクトを定義するための構文です。
オブジェクトの内容は properties (またはメンバー)と呼ばれ、プロパティは name (またはキー)と value で構成されます。 プロパティ名は文字列または記号である必要があり、値は任意のタイプ(他のオブジェクトを含む)にできます。
すべてのJavaScript変数と同様に、オブジェクト名(通常の変数の場合もあります)とプロパティ名の両方で大文字と小文字が区別されます。 オブジェクトのプロパティにアクセスするには、単純なドット表記を使用します。
以下は、オブジェクトプロパティにアクセスするための構文です。
例:オブジェクト初期化子
上記の例では、オブジェクトpersonを定義しています。 オブジェクトには3つのプロパティがあります。 3番目のプロパティは関数を参照します。
上記のコードが正常に実行されると、次の出力が表示されます。
ES6では、プロパティ名と一致するプロパティ値を割り当てるときに、プロパティ値を省略できます。
例
上記のコードスニペットは、オブジェクト baz を定義しています。 オブジェクトにはプロパティ foo があります。 ES6はオブジェクトのキーfooに変数fooの値を暗黙的に割り当てるため、プロパティ値はここでは省略されます。
以下は、上記のコードに相当するES5です。
上記のコードが正常に実行されると、次の出力が表示されます。
この略記構文を使用して、JSエンジンは、同じ名前を持つ変数のスコープを調べます。 見つかった場合、その変数の値がプロパティに割り当てられます。 見つからない場合、参照エラーがスローされます。
Object()コンストラクター
JavaScriptは、オブジェクトを作成するための* Object()*という特別なコンストラクター関数を提供します。 new演算子は、オブジェクトのインスタンスを作成するために使用されます。 オブジェクトを作成するには、new演算子の後にコンストラクターメソッドが続きます。
以下は、オブジェクトを定義するための構文です。
以下は、プロパティにアクセスするための構文です。
例
上記のコードが正常に実行されると、次の出力が表示されます。
オブジェクトの割り当てられていないプロパティは未定義です。
例
上記のコードが正常に実行されると、次の出力が表示されます。
注-オブジェクトプロパティ名には、任意の有効なJavaScript文字列、または空の文字列を含む文字列に変換できるものを指定できます。 ただし、有効なJavaScript識別子ではないプロパティ名(たとえば、スペースやハイフンを持つ、または数字で始まるプロパティ名)には、角括弧表記を使用してのみアクセスできます。
プロパティには、変数に格納されている文字列値を使用してアクセスすることもできます。 つまり、オブジェクトのプロパティキーは動的な値にすることができます。 例:変数。 この概念を次の例に示します。
例
上記のコードが正常に実行されると、次の出力が表示されます。
コンストラクター関数
オブジェクトは、次の2つのステップを使用して作成することができます-
- ステップ1 *-コンストラクター関数を記述して、オブジェクトタイプを定義します。
以下は同じ構文です。
「this」キーワードは、現在使用中のオブジェクトを参照し、オブジェクトのプロパティを定義します。
- ステップ2 *-新しい構文でオブジェクトのインスタンスを作成します。
新しいキーワードは、関数コンストラクターを呼び出し、関数のプロパティキーを初期化します。
例-関数コンストラクターの使用
上記の例では、関数コンストラクターを使用してオブジェクトを定義しています。
上記のコードが正常に実行されると、次の出力が表示されます。
新しいプロパティは、以前に定義したオブジェクトにいつでも追加できます。 たとえば、次のコードスニペットを考慮してください-
上記のコードが正常に実行されると、次の出力が表示されます。
Object.createメソッド
オブジェクトは* Object.create()*メソッドを使用して作成することもできます。 コンストラクター関数を定義せずに、目的のオブジェクトのプロトタイプを作成できます。
例
上記の例では、オブジェクト-rolesを定義し、プロパティのデフォルト値を設定します。 オブジェクトのデフォルトのプロパティ値を上書きする2つの新しいインスタンスが作成されます。
上記のコードが正常に実行されると、次の出力が表示されます。
Object.assign()関数
- Object.assign()*メソッドは、列挙可能なすべてのプロパティの値を1つ以上のソースオブジェクトからターゲットオブジェクトにコピーするために使用されます。 ターゲットオブジェクトを返します。
以下は同じ構文です。
例-オブジェクトの複製
上記のコードが正常に実行されると、次の出力が表示されます。
例-オブジェクトのマージ
上記のコードが正常に実行されると、次の出力が表示されます。
注-オブジェクトのコピーとは異なり、オブジェクトがマージされると、大きなオブジェクトはプロパティの新しいコピーを保持しません。 むしろ、元のオブジェクトに含まれるプロパティへの参照を保持します。 次の例でこの概念を説明します。
上記のコードが正常に実行されると、次の出力が表示されます。
プロパティを削除する
delete演算子を使用して、プロパティを削除できます。 次のコードは、プロパティを削除する方法を示しています。
例
上記のコードが正常に実行されると、次の出力が表示されます。
コードスニペットは、オブジェクトからプロパティを削除します。 in演算子がオブジェクト内でプロパティを見つけられないため、この例はfalseを出力します。
オブジェクトの比較
JavaScriptでは、オブジェクトは参照型です。 2つの異なるオブジェクトは、同じプロパティを持っている場合でも決して等しくなりません。 これは、完全に異なるメモリアドレスを指しているためです。 共通の参照を共有するオブジェクトのみが比較でtrueになります。
例1-異なるオブジェクト参照
上記の例では、 val1 と val2 は2つの異なるメモリアドレスを参照する2つの異なるオブジェクトです。 したがって、等しいかどうかを比較すると、演算子はfalseを返します。
例2-単一オブジェクト参照
上記の例では、val1のコンテンツはval2に割り当てられます。 val1のプロパティの参照はval2と共有されます。 オブジェクトはプロパティへの参照を共有するようになったため、等価演算子は、2つの異なるメモリアドレスを参照する2つの異なるオブジェクトに対してtrueを返します。 したがって、等しいかどうかを比較すると、演算子はfalseを返します。
オブジェクトの非構造化
「破壊」という用語は、エンティティの構造を分割することを指します。 JavaScriptの構造化代入構文により、配列またはオブジェクトからデータを個別の変数に抽出できます。 同じことが次の例に示されています。
例
上記のコードが正常に実行されると、次の出力が表示されます。
注意-破壊を有効にするには、 _ nodeのファイルをノードとして実行します– harmony_destructuring file_name_