新しい ECMAscript オブジェクト機能の紹介

新しい ECMAscript オブジェクト機能の紹介

1. オブジェクトのプロパティ

1.1 属性表記

ECMAScript 2015 、変数と関数をオブジェクトのプロパティやメソッドとして中括弧内に直接記述できます。この書き方の方が簡潔です。

サンプルコードは次のとおりです。

let name = '一碗の周'
let job = 'フロントエンドエンジニア'

// 属性表記は変数に直接書き込まれます。let obj1 = {
  名前、
  仕事、
  言う私() {
    console.log(名前)
  }
}
// let obj2 = { と同等
  名前: 名前、
  仕事: 仕事、
  sayMe: 関数() {
    console.log(名前)
  }
}
コンソールにログ出力します。

2. プロパティ名を計算する

JavaScriptでは、プロパティを角括弧 [] または 2 つの方法で定義します。

// 方法 1 obj.foo = true;
// 方法2 obj['a'+'bc'] = 123;


. 演算子には大きな制限があります。たとえば、first name などの属性は角括弧を使用してのみ定義できます。括弧アプローチを使用すると、識別子を使用すると構文エラーになる変数または文字列リテラルを使用してプロパティを定義できます。

例えば:

人 = {} とします。
  lastName = "姓";

person["first name"] = "Nicholas";
person[lastName] = "ザカス";
console.log(person["first name"]); // "ニコラス"
console.log(person[lastName]); // "ザカス"

これら 2 つのメソッドは、角括弧を使用してのみ定義できます。 ES5 では、文字列リテラルをオブジェクトリテラルのプロパティとして使用できます。次に例を示します。

人 = {
  「名」:「ニコラス」
};
console.log(person["first name"]); // "ニコラス"


ただし、属性名が変数内に存在する場合や計算する必要がある場合は、オブジェクトリテラルを使用して属性を定義することはできません。

ES5 より前では、プロパティ名が変数であるか、動的に計算される必要がある場合は、object.[変数名] を介してのみアクセスできます。

p = {とします
  名前:「李思」
  年齢: 20
}
attName = 'name' とします。
console.log(p[attName]) //ここでattNameは変数名を表します。
// 李思

さらに、属性名を動的に計算するこの方法は、リテラルでは使用できません。

attName = 'name' とします。
  p = {とします
    attName : '李四', // ここで attName は属性名であり、p の各レベルで属性名 attName を持つ属性を定義することと同じです。
    年齢: 20
  }
console.log(p[attName]) // 未定義


ECMAScript 2015では、プロパティ名を [ ] で囲んで、括弧内の定義済み変数を参照できます。

attName = 'name' とします。
  p = {とします
    [attName]: 'Li Si', // 変数 attName を参照します。これは、age: 20というnameという名前の属性を追加することと同じです。
  }
console.log(p[attName]) // 李斯

オブジェクトリテラル内の括弧は、プロパティ名が評価されることを示し、その内容は文字列として評価されます。

3.オブジェクトメソッド

3.1Object.is() メソッド

ECMAScript 2015は、2 つの値の等価性を比較する演算子が、等価演算子 ( == ) と厳密な等価演算子 ( === ) の 2 つだけあります。

  • しかし、どちらのオペレーターにも欠点がある
  • 等価演算子を使用すると、データ型は自動的に変換されます

厳密な等価演算子により、NaN はそれ自身と等しくなくなり、+0 は -0 と等しくなります。

ECMAScript 2015 では、この問題を解決するために「 Same-value equalityアルゴリズムが提案されました。 Object.isこのアルゴリズムを展開する新しい方法です。 2 つの値が厳密に等しいかどうかを比較するために使用され、動作は基本的に厳密な比較演算子 (===) と同じです。

構文構造は次のとおりです。

Object.is(値1, 値2);


パラメータの説明:

  • value1 : 比較する最初の値。
  • value2 : 比較する2番目の値。

ブール値を返します。

サンプルコードは次のとおりです。

console.log(+0 === -0); //true
console.log(NaN === NaN); // 偽

console.log(Object.is(+0, -0)); // 偽
console.log(Object.is(NaN, NaN)); // 真

3.2Object.assign() メソッド

Object.assign()メソッドは、1 つ以上のソース オブジェクトからターゲット オブジェクトにすべての列挙可能なプロパティの値を割り当てるために使用されます。対象オブジェクトを返します。

構文構造は次のとおりです。

Object.assign(ターゲット、...ソース)


パラメータの説明:

  • target : ターゲットオブジェクト
  • sources : ソースオブジェクト

ターゲット オブジェクトのプロパティに同じキーがある場合、そのプロパティはソース オブジェクトのプロパティによって上書きされることに注意してください。同様に、後続のソース オブジェクトのプロパティは、先行するソース オブジェクトのプロパティをオーバーライドします。

サンプルコードは次のとおりです。

ソース = {
  名前:「周の一杯」
  仕事: 「フロントエンドエンジニア」
}
ターゲットを{}とします
// 1 つ以上のソース オブジェクトからターゲット オブジェクトにすべての列挙可能なプロパティの値を割り当てるには、assign() メソッドを使用します。
オブジェクト.assign(ターゲット、ソース)
console.log(ターゲット);
// ディープコピーであるかどうかを確認する target.name = 'a bowl of porridge'
console.log(target, source); //{ name: '一碗周', job: 'Front-end siege lion' } { name: '一碗粥', job: 'Front-end siege lion' }


4.スーパーキーワード

this キーワードは常に関数が配置されている現在のオブジェクトを参照することがわかっています。ECMAScript ECMAScript 2015 、現在のオブジェクトのプロトタイプ オブジェクトを指す別の同様のキーワード super が追加されました。

// プロトタイプオブジェクトとして使用するオブジェクトを定義します。const proto = {
  v: 「こんにちは」
}
// オブジェクトを定義する const obj = {
  v: '世界'、
  プリントV1() {
    コンソールにログ出力します。
  },
  // superキーワードを使用する printV2() {
    コンソールにログ出力します。
  }
}
//objオブジェクトのプロトタイプをprtotに変更します
オブジェクト.setPrototypeOf(obj, proto)
// このobj.printV1()の使用法 // 世界
// super obj.printV2() の使い方 // こんにちは


superキーワードがプロトタイプ オブジェクトを表す場合、そのオブジェクトのメソッドでのみ使用できることに注意してください。他の場所で使用するとエラーが発生します。現在、定義されたメソッドがオブジェクト メソッドであることをJavaScriptエンジンが確認できるのは、オブジェクト メソッドのショートカットのみです。

5. オブジェクト拡張演算子

オブジェクト スプレッド演算子 ( ... ) は、パラメーター オブジェクトのすべてのトラバース可能なプロパティを抽出し、現在のオブジェクトにコピーするために使用されます。

サンプルコードは次のとおりです。

// オブジェクト拡張演算子 (...) は、パラメーター オブジェクトのすべてのトラバース可能なプロパティを抽出し、現在のオブジェクトにコピーするために使用されます。
obj = {
  名前:「周の一杯」
  仕事: 「フロントエンドエンジニア」
}
新しいオブジェクトを = {
  ...オブジェクト
}
console.log(newObj); // { name: 'Yiwan Zhou', job: 'フロントエンドエンジニア' }
// ディープコピーであるかどうかを確認する newObj.name = 'A bowl of porridge'
console.log(obj, newObj); // { name: '一碗周', job: 'Front-end siege lion' } { name: '一碗粥', job: 'Front-end siege lion' }


配列は特殊なオブジェクトなので、オブジェクトスプレッド演算子は配列にも使用できます。

arr = [1, 2, 3, 4, 5]とします。
obj = {
  …あぁ
}
console.log(obj); // { '0': 1, '1': 2, '2': 3, '3': 4, '4': 5 }


スプレッド演算子の後にオブジェクトが続かない場合は、自動的にオブジェクトに変換されます。

コンソール.log(
  {
  ...1 // {...Object(1)} と同等
  }
); // {}
コンソール.log(
  {
  ...true // {...Object(true)} と同等
  }
); // {}
コンソール.log(
  {
  ...undefined // {...Object(undefined)} と同等
  }
); // {}
コンソール.log(
  {
  ...null // {...Object(null)} と同等
  }
); // {}

ECMAscript の新機能オブジェクトの紹介に関するこの記事はこれで終わりです。より関連性の高い ECMAscript オブジェクトの紹介コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。皆様、今後とも 123WORDPRESS.COM を応援してください。

以下もご興味があるかもしれません:
  • JavaScript 学習概要 (I) ECMAScript、BOM、DOM (コア、ブラウザ オブジェクト モデル、ドキュメント オブジェクト モデル)
  • ECMAScript6 入門の詳しい説明 - クラスオブジェクト
  • JavaScript徹底理解シリーズ(18):オブジェクト指向プログラミングのECMAScript実装
  • ECMAScript5 のオブジェクト アクセサー プロパティ: ゲッターとセッターの紹介

<<:  Dockerコンテナとホストマシン間の8時間の差の問題を解決する

>>:  ラベルとボタンを削除し、背景画像の点線/影を追加すると完璧な解決策になります

推薦する

Dockerコンテナのログ処理の詳細な説明

Docker には多くのログ プラグインがあります。デフォルトでは json-file を使用します...

C++ を使用して MySQL に接続する方法

C++でMySQLに接続する際の参考情報です。具体的な内容は以下のとおりです。 MySQLCon ク...

MySQLのビューの詳細な説明

ビュー: MySQL のビューはテーブルと多くの類似点があります。ビューも複数のフィールドと複数のレ...

MySQL 8.0.12 のインストールと設定方法のグラフィックチュートリアル (Windows 版)

1. はじめにプロジェクトではMySQLを使用しています。インターネット上の例を参考にインストール...

LinuxにKafkaをインストールする

目次1.1 前提条件としてのJava環境1.2 Zookeeperのインストールと設定1.3 Kaf...

Linux システム MySQL8.0.19 クイックインストールと構成チュートリアル図

目次1. 環境の紹介2. MySQL-8.0.19をインストールする3. MySQLを設定する1. ...

メタビューポートはiPhoneでウェブページをフルスクリーン表示コントロールします

困り果てて、ふと、私がよく行くSinaのタッチスクリーン版はどうやって作られているのだろう?と考えま...

nginx がドメイン名アクセス用に設定されている場合にドメイン名の後に 2 つのスラッシュ // が表示される問題の解決方法

最近、個人のウェブサイトを書き直しました。Alibaba Cloudで新しいサーバーを購入しました。...

Nginxでネットワーク分離を解決した実践記録を詳しく解説

必要最近、Node オンライン サービスを移行する必要があったため、2 つの新しいオンライン サーバ...

MySQL データベース データのロード 複数の用途

目次MySQL Load Dataの多様な用途1. LOAD の基本的な背景2. 基本パラメータをロ...

Dockerコンテナに入る方法と出る方法

1 Dockerサービスを開始するまず、docker サービスを開始する方法を知っておく必要がありま...

MySQLの実行プロセスとシーケンスについての簡単な説明

目次1:mysql実行プロセス1.1: コネクタ1.2: キャッシュ1.3: アナライザー1.4: ...

ウェブサイトのユーザビリティとコンバージョン率を向上させる 25 のツール

ウェブサイトの場合、ユーザビリティとは、ユーザーが必要な情報を効果的に見つけたり、タスクを完了したり...

JavaScriptはイベントリスナーをイベント委任にバッチで追加します。詳細なプロセス

1. イベント委任とは何ですか?イベント委譲: イベントバブリングの特性を利用して、子要素に登録すべ...

js 正確な計算

var numA = 0.1; var numB = 0.2; アラート(numA + numB)...