準備するまずはテストオブジェクトobjを準備しましょう。 コードリスト1 var notEnum = Symbol("継承された列挙不可能なシンボル"); var プロトコル = { [Symbol("継承された列挙可能なシンボル")]: "継承された列挙可能なシンボル", 名前: 「継承された列挙可能なプロパティ」 }; // 列挙できないプロパティ Object.defineProperty(proto, "age", { 値: "列挙不可能なプロパティを継承する" }); // 列挙不可能なシンボルプロパティ Object.defineProperty(proto, notEnum, { 値: "列挙不可能なシンボルを継承する" }); var obj = { job1: "列挙可能な属性 1 を所有する", job2: "列挙可能な属性2を所有する", [Symbol("自身の列挙可能なシンボル")]: "自身の列挙可能なシンボル" }; // Object.setPrototypeOf(obj, proto) を継承します。 // 列挙できないプロパティ Object.defineProperty(obj, "address", { 値: "列挙できない属性を所有する" }); // 列挙不可能なシンボル属性 var ownNotEnum = Symbol("列挙不可能なシンボルを所有する"); オブジェクト.defineProperty(obj, ownNotEnum, { 値: "列挙不可能なシンボルを所有する" }); 5つの武器…のためにこれは、オブジェクト トラバーサルの分野ではベテランです。この方法では、オブジェクト自体とその継承のすべての列挙可能なプロパティ (シンボル型を除く) をトラバースできます。 コードリスト2 for(var attr in obj){ console.log(attr,"==",obj[attr]); } /* job1 == 自身の列挙可能なプロパティ 1 job2 == 列挙可能なプロパティ 2 を所有する name == 継承された列挙可能なプロパティ */ オブジェクト.キーオブジェクト自体のすべての列挙可能なプロパティの配列を取得します(シンボル型を除く) コードリスト3 オブジェクト.keys(obj).map((attr)=>{ console.log(attr,"==",obj[attr]); }); /* job1 == 自身の列挙可能なプロパティ 1 job2 == 列挙可能なプロパティ 2 を所有する */ オブジェクト.getOwnPropertyNamesオブジェクト自体のすべての非シンボルプロパティ名(列挙不可能なものを含む)の配列を取得します。 コードリスト4 Object.getOwnPropertyNames(obj).map((attr)=>{ console.log(attr,"==",obj[attr]); }); /* job1 == 自身の列挙可能なプロパティ 1 job2 == 列挙可能なプロパティ 2 を所有する アドレス == 自身の列挙不可能な属性*/ オブジェクト.getOwnPropertySymbolsオブジェクト自体のSymbol型であるすべての属性名(列挙できないものも含む)の配列を取得します。 コードリスト5 Object.getOwnPropertySymbols(obj).map((attr)=>{ console.log(attr,"==",obj[attr]); }); /* シンボル(自身の列挙可能なシンボル) == 自身の列挙可能なシンボル シンボル(自身の非列挙シンボル) == 自身の非列挙シンボル */ 反映する.ownKeysオブジェクトのすべてのプロパティ名の配列を取得します(列挙できないタイプとシンボルタイプを含む) リスト6 Reflect.ownKeys(obj).map((attr)=>{ console.log(attr,"==",obj[attr]); }); /* job1 == 自身の列挙可能なプロパティ 1 job2 == 列挙可能なプロパティ 2 を所有する アドレス == 自身の非列挙属性 シンボル (自身の列挙可能なシンボル) '==' '自身の列挙可能なシンボル' シンボル (自身の非列挙シンボル) '==' '自身の非列挙シンボル' */ 要約する武器庫の指示に従って、必要に応じて適切な武器を選択してください。
5 つの武器の中で最も強力なのは Reflect.ownKeys です。これは、Symbol と列挙不可能な型の両方で機能します。これは、Object.getOwnPropertyNames と Object.getOwnPropertySymbols を組み合わせたものです。 拡張機能オブジェクト.値オブジェクト自体のすべての列挙可能なプロパティ(シンボル型を除く)の値の配列を取得します。 リスト7 オブジェクト.values(obj).map((val)=>{ コンソールログ(val); }); /* 列挙可能なプロパティ 1 を所有する 列挙可能なプロパティ 2 を所有する */ オブジェクト.エントリオブジェクト自体のすべての列挙可能なプロパティ(シンボル型を除く)のキーと値のペアの配列を取得します。 リスト7 オブジェクト.entries(obj).map((val)=>{ コンソールログ(val); }); /* [ 'job1', '列挙可能な属性 1 を所有' ] [ 'job2', '列挙可能な属性 2 を所有する' ] */ 所有プロパティオブジェクトのプロパティに指定されたプロパティが含まれているかどうかを確認し、ブール値を返します。 MDNから引用: JavaScriptはhasOwnPropertyプロパティ名を保護しないので、オブジェクトがこのプロパティ名のプロパティを持つ可能性があるので、プロトタイプチェーンでhasOwnPropertyメソッドを直接使用します。 コードリスト8 for(var attr in obj){ (Object.prototype.hasOwnProperty.call(obj,attr)) の場合{ console.log("独自の属性: :",attr); }それ以外{ console.log("継承された属性: :",attr); } } /* 独自のプロパティ:: job1 独自のプロパティ:: job2 継承されたプロパティ:: 名前 */ プロパティは列挙可能指定されたオブジェクト内のプロパティが列挙可能かどうかを確認し、ブール値を返します。 コードリスト9 Reflect.ownKeys(obj).map((attr) => { Object.prototype.propertyIsEnumerable.call(obj, attr) の場合 { console.log("列挙可能なプロパティ: :", attr); } それ以外 { console.log("列挙できない属性: :", attr); } }); /* 列挙可能なプロパティ:: job1 列挙可能なプロパティ:: job2 列挙不可能なプロパティ:: アドレス 列挙可能なプロパティ:: シンボル (列挙可能なシンボルを所有) 列挙不可能なプロパティ:: シンボル (列挙不可能なシンボルを所有) */ 参照する MDN オブジェクト 要約するこれで、JavaScript でオブジェクトをトラバースする 5 つの方法についての記事は終了です。JavaScript でオブジェクトをトラバースすることに関する関連コンテンツをさらにご覧になりたい場合は、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Docker ビルド kubectl イメージ実装手順
>>: CSS の position 属性の値に関する研究 (概要)
最近、あるプロジェクトのクライアントが、上部に 2 つのタブ メニューを配置することを要求しました。...
今日、私の同僚が MYSQL クエリ ステートメントの作成時に非常に奇妙な問題に遭遇しました。MyS...
sort コマンドは非常によく使用されますが、-o、-n、-u、-r などの多くのパラメーターがあり...
序文この記事には1. データベースのいくつかの主要な制約2. テーブル間の関係制約:主キー制約: 機...
目次仮想DOMとは何ですか?なぜ仮想DOMが必要なのでしょうか?仮想 DOM はどのようにして実際の...
ClickHouse は、オープンソースの列指向 DBMS (Yandex によって開発) です。 ...
目次1. 外部キー制約外部キーとは何ですか?外部キーを使用する条件:外部キーの定義構文は次のとおりで...
必要:あるフィールドの同一項目を結合し、別の時間フィールドで並べ替えます。例:初めに テーブルから都...
現在の環境は次のとおりです。セントロス7.5 docker-ce 18.06.1-ce 1. まずc...
Linuxでユーザーが所属するグループを変更する1. ユーザーのグループを設定する usermod ...
1. 問題の再現:各日の合計数を日ごとにカウントします。データのない日がある場合、グループ化によっ...
BackUpMysql.sh スクリプト #!/bin/bash PATH=/bin:/sbin:/...
CSS の font-family プロパティを使用して中国語フォントを参照する場合、フォントを定義...
この記事は主に、docker デプロイメント springboot プロジェクトのサンプル分析を紹介...
この記事では、例を使用して、MySQL データベースの一般的な基本操作について説明します。ご参考まで...