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

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

推薦する

【HTML要素】タグテキストの詳細説明

1. 基本的なテキスト要素を使用してコンテンツをマークアップするまず表示効果を見てみましょう:対応す...

CentOS 8.4 に Docker をインストールする詳細なチュートリアル

目次序文:システム要件:インストール環境:古いバージョンをアンインストールします: yum は具体的...

10 種類のモダンなレイアウトを実現するための CSS コード

序文日曜日に自宅で web.dev の 2020 3 日間ライブを視聴したところ、興味深い点がたくさ...

JSホモロジー戦略とCSRFの詳細な説明

目次概要同一生成元ポリシー (SOP)相同制限クロスドメインをバイパスクロスサイトリクエストフォージ...

CentOS8 yum/dnfで国内ソースを設定する方法

CentOS 8 ではソフトウェア パッケージのインストール プログラムが変更され、yum 構成方法...

JavaScriptのプロトタイプオブジェクトを徹底的に理解しましょう

目次1. プロトタイプとは何ですか? 1.1 関数プロトタイプオブジェクト1.2 コンストラクタを使...

Nodejs がイントラネット侵入サービスを実装

目次1. LAN内のプロキシ2. イントラネットの浸透イントラネット侵入とは何ですか?橋プロキシサー...

QQブラウザ機能を実装するためのCSS

コード知識ポイント1. fullpage.jsを組み合わせてフルスクリーンスクロールを実現する2. ...

Linux コマンドライン操作 Baidu クラウドのファイルのアップロードとダウンロード

目次0. 背景1. インストール2. Baidu Cloudアカウントにログインする3. ファイルを...

MySQL の異なるテーブル間でフィールドをコピーする

場合によっては、フィールドから別の新しいフィールドにデータの列全体をコピーする必要があります。これは...

CSSにおけるマージン値と垂直マージンの重なりについて

平行ボックスの余白 (二重余白の重なり) に関する面接の質問: 1 つのボックスに上余白があり、もう...

HTML テーブル境界制御実装コード

一般的に、テーブルを使用する場合は、常に <table border="1"...

Linux システムで Centos7 を使って ElasticSearch ミドルウェアと共通インターフェースを構築するデモ

1. ミドルウェアの紹介1. 基本概念ElasticSearch は Lucene をベースにした検...

プロセスのすべての情報を表示するLinuxメソッドの例

サーバー上にタスク プロセスがあります。 ps -ef | grep task を使用して表示すると...

MySQLデータベースにパスワードを入力した後にフラッシュバックする問題の解決策

パスワード入力後にMySQLデータベースがクラッシュする問題と解決策1 ケースの説明最近、基本的な機...