es6 の「for of」はオブジェクトを横断できません。理由: Iterator インターフェイスは ES6 で導入されました。「for-of」を使用して走査できるのは、Iterator インターフェイスを提供するデータ型のみです。一方、通常のオブジェクトはデフォルトで Iterator インターフェイスを提供しないため、「for-of」は横断。
このチュートリアルの動作環境: Windows 7 システム、ECMAScript バージョン 6、Dell G3 コンピューター。
フロントエンドの継続的な開発に伴い、for、forEach、do..while、for...in などの多くのライト ループのメソッドが登場しました。ただし、これらのループにも独自のループがあります。アプリケーションシナリオと利点と欠点。
ES6 は、文字列、配列、その他の配列のようなオブジェクトをループできる新しいループ メソッド for...of を提供します。最も一般的な Object オブジェクトであるため、ループできるのは当然です。
以下のコード例を見てみましょう:
{ // 迭代数组 const iterable = ['a', 'b']; for (const value of iterable) { console.log(value); } // output: a b } { // 普通对象 const obj = { a: 'A', b: 'B' } for(const item of obj){ console.log(item) } // Uncaught TypeError: obj is not iterable }
ああ、エラーが報告されました: Uncaught TypeError: obj is not iterable
。ヒント: obj は反復可能ではないため、for...of
を直接使用して Object オブジェクトを走査することはできません。
では、ほとんどのデータ構造を横断できる for...of が Object オブジェクトを横断できないのはなぜでしょうか?
理由:
Iterator は ES6 で導入されました。for-of、while Array のループに使用できるのは、Iterator インターフェイスを提供するデータ型のみです。 Set、Map などのデータ型、および引数などの特定の配列はすべてデフォルトで Iterator インターフェイスを提供するため、for-of を使用して走査できます。
通常のオブジェクトの場合、for...of 構造体を直接使用することはできず、エラーが報告され、obj は反復可能ではありません
というプロンプトが表示されます。これは、通常のオブジェクトが反復可能であることを意味します。デフォルトでは Iterator インターフェイスがありません。Iterator インターフェイスを使用するには、事前に展開する必要があります。
それにどう対処すればよいでしょうか? for-of でオブジェクトを走査しましょう
理由は明らかですが、どうすれば解決できますか?オブジェクトやその他のデータ型に Iterator インターフェイスを提供できますか?
答えは「はい」です。ES6 では Symbol.iterator 属性も提供されます。データ構造にこの属性がある限り、データ構造は、 Iterator インターフェイス。次に、このインターフェイスを実装する方法があります。以下が最も単純な実装です:
newObj[Symbol.iterator] = function(){ let index = 0 , self = this , keys = Object.keys( self ) ; return { next(){ if( index < keys.length ){ return { value: self[keys[index++]] , done: false }; } else{ return { value: undefined , done: true } } } }; };
注意深く見ると、Symbol.iterator インターフェイスが実際には Generator 関数であることがわかります。コードを簡略化します:
newObj[Symbol.iterator] = function* (){ let keys = Object.keys( this ) ; for(let i = 0, l = keys.length; i < l; i++){ yield this[keys[i]]; } } for(let v of newObj){ console.log( v ); } // 输出结果 // 5 // 6
注目に値するのは、Object.keys が for-in が遭遇する継承の問題をたまたま解決する前に
これは私たちの期待を満たしており、for-of を使用してオブジェクトを走査します, しかし、何かが間違っているようです。トラバースします オブジェクトは通常、キーと値を同時に出力することが期待されています。このようにコードを調整すると、
newObj[Symbol.iterator] = function* (){ let keys = Object.keys( this ) ; for(let i = 0, l = keys.length; i < l; i++){ yield { key: keys[i] , value: this[keys[i]] }; } } for(let v of newObj){ console.log( v ); } // 输出结果 // {key: "e", value: 5} // {key: "f", value: 6}
のようにオブジェクトが返されますが、これは非常に不快に思えます。構造化代入を試してみることはできますか? 。 。
for(let {key, value} of newObj){ console.log(key, value ); } // 输出结果 // e 5 // f 6
これは完璧ですね。 。 。
拡張知識: for-of ループと他のループの違い
ループ オブジェクト | ループを中断できるかどうか | 戻り値があるかどうか | |
---|---|---|---|
| forループ本体の length は | #戻り値なし # にすることもできます##forEach | |
配列、マップ、セットなど、文字列、通常のオブジェクトはループできない
| 不可能
戻り値なし |
do...while | |
Yes | 戻り値なしwhile | ||
##Yes 戻り値なし |
##map | 新しい配列メンバーを形成します。ループできるのは配列のみです。文字列と通常のオブジェクトはループできません。 set 、map | |
新しい配列を返します。元の配列には影響しません |
filter | 配列メンバーのフィルタリング。ループできるのは配列のみです。文字列と通常のオブジェクトはループできません。設定、マップ | |
新しい配列を返しますが、元の配列には影響しません |
for...in | 循環可能 | |
map,set。数値キー名をトラバースでき、プロトタイプ チェーン上のキーも含め、他の手動で追加されたキーもトラバースできます。
| Can
戻り値なし
| for...of | ループ可能な反復可能オブジェクト、ループ不可能な通常のオブジェクト (統合データ構造トラバーサル) |
戻り値なし |
[関連する推奨事項: | JavaScript ビデオ チュートリアル、 | Web フロントエンド
以上がes6 はオブジェクトをトラバースできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Reactの人気には、パフォーマンスの最適化、コンポーネントの再利用、豊富なエコシステムが含まれます。 1.パフォーマンスの最適化は、仮想DOMおよび拡散メカニズムを介して効率的な更新を実現します。 2。コンポーネントの再利用は、再利用可能なコンポーネントによって重複コードを削減します。 3.リッチなエコシステムと一方向のデータフローは、開発エクスペリエンスを向上させます。

Reactは、動的でインタラクティブなユーザーインターフェイスを構築するための選択ツールです。 1)コンポーネント化とJSXは、UIを分割して簡単に再利用します。 2)国家管理は、UIの更新をトリガーするためにUseStateフックを通じて実装されます。 3)イベント処理メカニズムは、ユーザーの相互作用に応答し、ユーザーエクスペリエンスを向上させます。

Reactは、ユーザーインターフェイスを構築するためのフロントエンドフレームワークです。バックエンドフレームワークは、サーバー側のアプリケーションを構築するために使用されます。 Reactはコンポーネントで効率的なUIアップデートを提供し、バックエンドフレームワークは完全なバックエンドサービスソリューションを提供します。テクノロジースタックを選択するときは、プロジェクトの要件、チームのスキル、およびスケーラビリティを考慮する必要があります。

HTMLとReactの関係は、フロントエンド開発の中核であり、最新のWebアプリケーションのユーザーインターフェイスを共同で構築します。 1)HTMLはコンテンツ構造とセマンティクスを定義し、Reactはコンポーネントを介して動的インターフェイスを構築します。 2)ReactコンポーネントはJSX構文を使用してHTMLを埋め込み、インテリジェントなレンダリングを実現します。 3)コンポーネントライフサイクルは、状態および属性に従ってHTMLレンダリングと動的に更新を管理します。 4)コンポーネントを使用して、HTML構造を最適化し、保守性を向上させます。 5)パフォーマンスの最適化には、不必要なレンダリングの回避、重要な属性の使用、およびコンポーネントの単一の責任を維持することが含まれます。

Reactは、インタラクティブなフロントエンドエクスペリエンスを構築するための好ましいツールです。 1)Reactは、コンポーネント化と仮想DOMを通じてUIの開発を簡素化します。 2)コンポーネントは、関数コンポーネントとクラスコンポーネントに分割されます。関数コンポーネントはよりシンプルで、クラスコンポーネントはより多くのライフサイクル方法を提供します。 3)Reactの作業原則は、パフォーマンスを改善するために仮想DOMおよび調整アルゴリズムに依存しています。 4)国家管理は、usestateまたはthis.stateを使用し、ComponentDidmountなどのライフサイクルメソッドが特定のロジックに使用されます。 5)基本的な使用には、コンポーネントの作成と状態の管理が含まれ、高度な使用にはカスタムフックとパフォーマンスの最適化が含まれます。 6)一般的なエラーには、不適切なステータスの更新とパフォーマンスの問題が含まれます。

Reactは、コアコンポーネントと状態管理を備えたユーザーインターフェイスを構築するためのJavaScriptライブラリです。 1)コンポーネントと州の管理を通じてUIの開発を簡素化します。 2)作業原則には和解とレンダリングが含まれ、React.memoとusememoを通じて最適化を実装できます。 3)基本的な使用法は、コンポーネントを作成およびレンダリングすることであり、高度な使用法にはフックとコンテキストアピの使用が含まれます。 4)不適切なステータスの更新などの一般的なエラーでは、ReactDevtoolsを使用してデバッグできます。 5)パフォーマンスの最適化には、React.MEMO、仮想化リスト、コードスプリッティの使用が含まれ、コードを読みやすく保守可能に保つことがベストプラクティスです。

ReactはJSXとHTMLを組み合わせてユーザーエクスペリエンスを向上させます。 1)JSXはHTMLを埋め込み、開発をより直感的にします。 2)仮想DOMメカニズムは、パフォーマンスを最適化し、DOM操作を削減します。 3)保守性を向上させるコンポーネントベースの管理UI。 4)国家管理とイベント処理は、インタラクティブ性を高めます。

Reactコンポーネントは、機能またはクラスによって定義され、UIロジックのカプセル化、およびプロップを介して入力データを受け入れることができます。 1)コンポーネントの定義:関数またはクラスを使用して、反応要素を返します。 2)レンダリングコンポーネント:Reactコールレンダリングメソッドまたは機能コンポーネントを実行します。 3)マルチプレックスコンポーネント:データをプロップに渡して、複雑なUIを構築します。コンポーネントのライフサイクルアプローチにより、ロジックをさまざまな段階で実行でき、開発効率とコードメンテナビリティが向上します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
