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

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

推薦する

Kubernetes の応用分野の概要

Kubernetes は、アプリケーションの移植性とハイブリッド クラウド/マルチクラウドの展開をサ...

nginx と Tencent Cloud の無料証明書を使用して https を作成する方法

httpsを取得する方法を勉強しています。最近、Tencent Cloud が提供する無料の SSL...

Angularコンポーネントライフサイクルの詳細説明(I)

目次概要1. フックの呼び出し順序2. onChangesフック3. 変更検出メカニズムとDoChe...

Dockerがログファイルを保存する場所の詳細な説明

目次ログはどこに保存されますか?コンテナ内のアプリケーションからのログを表示するDockerデーモン...

mysqlにコメント情報を追加する実装

序文最近、MySQL に関するメモをいくつか尋ねる人がいたので、ブログ記事を書かなければなりません。...

docker イメージのプル速度が遅い問題の解決策

現在、Docker には中国向けの公式ミラーがあります。詳細については、https://www.do...

プライベートレジストリ内の画像を照会または取得する方法

Dockerはプライベートレジストリ内のイメージを照会または取得するために、 docker 検索 1...

ウェブページのアクセス速度に関する主な問題と解決策

<br />ウェブサイトのアクセス速度はウェブサイトのトラフィックに直接影響を及ぼし、ウ...

初心者がHTMLタグを学ぶ(2)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

Vue3でelement-plusを使用する方法の詳細な説明

目次1. インストール2. main.jsにインポートする3. 使用Vue3がリリースされてからしば...

Docker Alpine イメージのタイムゾーン問題に対する完璧な解決策

最近、Docker を使用して Java アプリケーションをデプロイしていたときに、タイムゾーンが間...

JSはマップを使用してdouble配列を統合します

目次序文データのシミュレーション結合されたデータ合併のアイデアコードの表示と分析最初のステップステッ...

Dockerfile の一般的なコマンドの概要

構文の構成: 1 注釈情報2 コマンド --- パラメータ [通常は大文字 | 実際には大文字と小文...

IE6 スペースバグ修正方法

コードを見てみましょう:コードをコピーコードは次のとおりです。 < !DOCTYPE html...

順序再構築に関する簡単な説明: MySQL シャーディング

目次1. 目的2. 環境整備1. 基本情報2. データベース環境の準備3. データベースを構築し、サ...