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 サービスをインストールして設定する方法
1. インデックスの原則インデックスは、列内の特定の値を持つ行をすばやく見つけるために使用されます。...
背景あっという間に忙しい一年が終わり、毎年恒例のイベントの時期がやってきます。お祭り気分を演出するに...
成果を達成する実装コードhtml <div class="コンテナ">...
<br />これは私がずっと前に集めた記事です。皆さんの参考のために共有したいと思います...
序文MySQL と Oracle のキーワードはまったく同じではありません。Oracle データベー...
インターネットで3レベルリンクを検索したところ、すべてオプションで書かれていました。突然、別の方法で...
序文Windows では、各インスタンスに適切なパラメータを使用してコマンド ラインから複数の My...
目次1. gojsの紹介2. Gojsのアプリケーションシナリオ3. gojs を選ぶ理由: 4. ...
1. Linuxに対応するRPMパッケージをダウンロードする5.6 より前のバージョンhttp://...
CSSを導入する3つの方法1. インラインスタイル利点: 書きやすく、重みがある 欠点: 構造とスタ...
コードをコピーコードは次のとおりです。 jQuery.cookie = 関数(名前、値、オプション)...
目次概要setTimeout() の確認スリープ関数の書き方シンプルな選択ループで実行されますか?要...
目次MySQLがmy.cnfを読み込む順序1. mysql.server の起動方法2. mysql...
「どうしたの?」特定の種類のダイアログ ボックスに慣れていない限り、ダイアログ ボックスが表示された...
要約する地球環境 ➡️ ウィンドウ通常関数 ➡️ ウィンドウまたは未定義コンストラクター ➡️ 構築...