新しい 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時間の差の問題を解決する

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

推薦する

CSS3で跳ねるボールのアニメーションを実現

私は通常、大手ウェブサイトの特別ページや製品リリースページを訪問するのが好きです。なぜなら、たくさん...

Linux で実行中のバックグラウンド プログラムを表示および終了する方法

Linux タスク管理 - バックグラウンド実行と終了fg、bg、ジョブ、&、ctrl + ...

Docker 経由で Spring Boot アプリケーションを公開およびデプロイするプロセスの分析

目次手動展開1.アイデアを使ってSpring Bootプロジェクトを作成する2. プロジェクトをJa...

MySQL の日付型の単一行関数コードの詳細な説明

MySQL の日付型単一行関数: CURDATE()またはCURRENT_DATE()は現在の日付を...

Docker ロード後にイメージ名が none になる問題の解決方法

最近、docker load -i コマンドを使用してイメージ パッケージを圧縮した後、イメージ名と...

MySQLカバーインデックスの利点

一般的な提案は、WHERE 条件のインデックスを作成することですが、これは実際には一方的です。インデ...

MySQLトリガーについて深く理解するための記事

目次1. SC テーブルを挿入または変更するときに、テスト スコアが 0 ~ 100 の範囲外の場合...

Linuxシステムにmsfをインストールするプロセスの詳細な説明

または、インストールプロセスを自分で書き留めてください。私のサーバーシステムはAliyun Linu...

JavaScript で DOM 要素を監視する MutationObServer の詳細

1. 基本的な使い方これは MutationObserver コンストラクターを通じてインスタンス化...

マークアップ言語 - 簡略化されたタグ

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

Mysqlのインポートとエクスポート時に発生する問題の解決

背景すべての業務を Docker の運用管理に移行してから、一連の落とし穴に遭遇しましたが、今回は ...

Vue Element UIの使用時に遭遇した問題をまとめる

目次1. DateTimePickerの日付選択範囲は現在時刻とそれ以前です2. DateTimeP...

MySQLデッドロックの原因と解決策

データベースは、オペレーティング システムと同様に、複数のユーザーが使用する共有リソースです。複数の...

MySQL 5.7 でルートパスワードを忘れた後に変更する方法の詳細なチュートリアル

序文長い間、MySQL のアプリケーションおよび学習環境は MySQL 5.6 以前のバージョンであ...