JavaScript ではオブジェクトを走査する順序は固定されていないと聞いたことがある人もいるかもしれません。実際のところ、この記述は特に正確ではありません。 オブジェクトには、トラバーサル順序に関する独自のルール セットがあります。これらのルールでは、オブジェクトのトラバーサル順序は要素が挿入される順序によって影響を受けますが、要素が挿入される順序によって完全に影響を受けるわけではありません。要素が挿入される順序でトラバースする必要があるシナリオの場合は、Map の使用を検討してください。
上に挙げたメソッドはすべて、オブジェクトを走査するための同じルールに従います。実際のトラバーサル ルールは、キー値のタイプによって異なります。 定数オブジェクト = {} obj['10'] = 'a'; obj['9'] = 'b'; obj[8] = 'c'; obj[7] = 'd'; console.log(Object.keys(obj)) // ["7", "8", "9", "10"] 最終的なトラバーサル順序は挿入順序を完全に無視します。また、オブジェクトでは、属性を追加するときのインデックス値が Number 型であっても、最終結果は暗黙的に文字列に変換されることに注意してください。 配列もオブジェクトの一種なので、上記のルールに従います。あるいは、配列との互換性のため、上記の動作になるのかもしれません。さらに、上記のルールを通じて、配列のようなオブジェクト(キー値が正の整数であり、長さ属性を持つ)のトラバースもインデックス順であると推測することもできます。 定数obj2 = {} obj2['1.1'] = 'a'; obj2['1.0'] = 'b'; obj2['-1'] = 'c'; obj2['ジャック'] = 'd' console.log(Object.keys(obj2)); // ["1.1", "1.0", "-1", "jack"] 実際、オブジェクトのインデックス値の型は、文字列だけでなく、シンボル型にもなります。シンボル タイプの場合、そのトラバーサル順序は、オブジェクトが挿入される順序に基づきます。 オブジェクトが上記の状況をすべて組み合わせる場合、つまり、すべてのタイプ (さまざまな形式の文字列、シンボル タイプ) がオブジェクトのインデックス値に表示される場合は、次のようになります。
ここまでで、オブジェクトのトラバース順序について皆さんは十分に理解できたと思います。最後に、もう 1 つ注目すべき点があります。それは、for...in のトラバース順序です。 当初は、 for...in のトラバーサル順序に関する統一された標準はなく、ブラウザメーカーが独自の好みに応じて for...in のトラバーサル順序を設定していました。トラバーサル順序に要件があり、古いブラウザバージョンとの互換性を維持したい場合は、これを使用しないことをお勧めします。その後、ES 2019 の提案によりこの現象は標準化され、現在では for...in の順序も上記の規則に従うようになりました。 上記のルールに従いますが、for...in はプロトタイプのプロパティも反復処理します。したがって、for...in の変数要素のルールは、まず、上で説明したオブジェクト トラバーサル ルールに従って変数オブジェクト自体をトラバースし、次にこのルールに従ってオブジェクトのプロトタイプをトラバースし、トラバーサルが先頭に到達するまでこれを繰り返します。 for...in に関する最後の注記以外には何もありません。実際、内容はあまりありません。 JS オブジェクトのトラバーサルの順序に関する詳細な説明はこれで終わりです。JS オブジェクトのトラバーサルの順序に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL 5.7 をバイナリモードでインストールし、Linux でシステムを最適化する手順
>>: Ubuntu 18.04 で SSH サービスをインストールして設定する方法
Docker はプロセスを中核としてシステムリソースを分離する管理ツールです。分離は、オペレーティン...
債券とは何かNIC ボンドは、実稼働シナリオでよく使用されるテクノロジーです。複数の NIC を 1...
目次方法1: set: データ型ではなくデータ構造であり、メンバーは一意である方法2: オブジェクト...
Vue のフロントエンドとバックエンドのポートが一致していませんconfig index.jsファイ...
1: syslog.conf の概要異なるタイプの Unix の場合、標準の UnixLog システ...
問題の原因ご存知のとおり、すべてのネットワーク動作は対応するネットワークトラフィックを生成し、すべて...
主な機能は次のとおりです。製品情報を追加する製品情報を変更する単一の製品を削除する複数の製品を削除す...
Microsoft は後からブラウザの研究開発に力を入れてきましたが、実際のところ、最新の IE ブ...
vsftpd の概要vsftpd は「very secure FTP daemon」の略称で、セキ...
目次概要ハッシュプロパティホストプロパティホスト名属性Href属性起源のプロパティユーザー名とパスワ...
最初のステップはTypeScriptをグローバルにインストールすることですnpmを使用してインストー...
エラー メッセージ:ストアの更新、挿入、または削除ステートメントが予期しない行数 (0) に影響を与...
ピクセル解決通常、モニター解像度と呼ばれるものは、実際にはモニターの物理的な解像度ではなく、デスクト...
Windows のデフォルトのスクロール バー スタイルは見苦しく、プロジェクト内でスクロール バー...
1. セレクターを調整するコンビネータを使用すると、セレクターの説明をより正確に記述できます (C...