検索
ホームページウェブフロントエンドjsチュートリアルJSのfor…inとfor…ofの違いは何ですか?

この記事では、JavaScript の for...in と for...of の違いを紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

JSのfor…inとfor…ofの違いは何ですか?

関連する推奨事項: 「JavaScript ビデオ チュートリアル

…向け、および…向け

1 の違い。配列の走査には通常、for ループが使用されます。

ES5 を使用している場合は、 ES5 には、map、filter、some、every、reduce、reduceRight などの配列トラバーサル関数がありますが、返される結果は異なります。ただし、foreach を使用して配列を走査する場合、break を使用してループを中断することはできず、return を使用して外部関数 に戻ることもできません。

Array.prototype.method=function(){
  console.log(this.length);
}
var myArray=[1,2,4,5,6,7]
myArray.name="数组"
for (var index in myArray) {
  console.log(myArray[index]);
}

2. 配列の走査における for の問題

1.index は文字列番号であり、幾何学的操作に直接使用することはできません

2. 走査順序は実際の配列の内部順序に従っていない可能性があります

3. for in を使用すると、プロトタイプを含む配列の列挙可能なすべてのプロパティを走査します。たとえば、Shangli のプロトタイプ メソッドのメソッドと name 属性は

であるため、オブジェクトの走査には for in の方が適しています。配列の走査には for in を使用しないでください。

for ループの使用に加えて、配列をより簡単かつ正確に走査して期待を達成するにはどうすればよいでしょうか (つまり、メソッドと名前を走査することなく)、ES6 の for of はさらに優れています。

Array.prototype.method=function(){
  console.log(this.length);
}
var myArray=[1,2,4,5,6,7]
myArray.name="数组";
for (var value of myArray) {
  console.log(value);
}

for in は配列のインデックス (つまり、キー名) を走査し、for of は配列要素の値を走査することに注意してください。

#for は、配列内の要素のみを走査します。プロトタイプ属性メソッドと配列のインデックス名は含まれません。

3、オブジェクトの走査

オブジェクトの走査は、通常、オブジェクトのキー名を走査するために for in を使用します

Object.prototype.method=function(){
  console.log(this);
}
var myObject={
  a:1,
  b:2,
  c:3
}
for (var key in myObject) {
  console.log(key);
}

for in は、myObject のプロトタイプ メソッド メソッドまで走査できます。プロトタイプ メソッドと For 属性をトラバースしたくない場合は、ループ内で判断できます。

hasOwnPropery メソッドは、プロパティがオブジェクトのインスタンス プロパティであるかどうかを判断できます。

for (var key in myObject) {
  if(myObject.hasOwnProperty(key)){
    console.log(key);
  }
}

ES5 の Object.keys(myObject) を通じて実行することもできます。プロトタイプのメソッドとプロパティを除く、オブジェクトのインスタンス プロパティの配列を取得します。

Object.prototype.method=function(){
  console.log(this);
}
var myObject={
  a:1,
  b:2,
  c:3
}

要約

  • for..of は、数値/配列オブジェクト/文字列/マップ/セットなどの反復子オブジェクトを含むコレクションを走査するのに適していますが、反復子がないためオブジェクトを走査することはできません。 forEach() とは異なり、break、 continue、return ステートメントに正しく応答できます

  • for-of ループは通常のオブジェクトをサポートしませんが、オブジェクトのプロパティを反復したい場合は、オブジェクトの場合は、for-in ループ (これがその役割です) または組み込みの Object.keys() メソッドを使用できます:

  • for (var key of Object.keys(someObject)) {
      console.log(key + ": " + someObject[key]);
    }
  • たとえば、マップ オブジェクトをトラバースするときに構造化を使用するのに適しています。


  • for (var [key, value] of phoneBookMap) {
       console.log(key + "'s phone number is: " + value);
    }
  • myObject.toString() メソッドをオブジェクトに追加するとき、同様に、myObjectSymbol.iterator メソッドを任意のオブジェクトに追加すると、このオブジェクトをトラバースできます。

    たとえば、jQuery を使用しているとします。内部の .each() メソッドはとても気に入っていますが、jQuery オブジェクトでも for-of ループをサポートしたいと考えています。これを行うことができます:

  • jQuery.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
Symbol.iterator を持つすべてのオブジェクトは反復可能と呼ばれます。以下の記事では、反復可能オブジェクトの概念が、for-of ループだけでなく、Map コンストラクターや Set コンストラクター、構造化代入、新しいスプレッド演算子など、言語全体でほぼ使用されていることがわかります。

  • for...ofのステップ

    or-of ループは、まずコレクションの Symbol.iterator メソッドを呼び出し、次に新しいイテレータ オブジェクトを返します。イテレータ オブジェクトには、.next() メソッドを持つ任意のオブジェクトを使用できます。for-of ループはこのメソッドをループごとに 1 回繰り返し呼び出します。たとえば、次のコードは私が思いつく最も単純なイテレータです。

  • #
    var zeroesForeverIterator = {
     [Symbol.iterator]: function () {
       return this;
      },
      next: function () {
      return {done: false, value: 0};
     }
    };

Extension

JS 配列走査:

1. 通常の for ループ

var arr = [1,2,0,3,9];
 for ( var i = 0; i <arr.length; i++){
    console.log(arr[i]);
}

2. for の最適化バージョンループ

変数を使用して長さをキャッシュし、長さの繰り返し取得を回避します。配列が大きい場合、最適化効果は明ら​​かです

for(var j = 0,len = arr.length; j < len; j++){
    console.log(arr[j]);
}

3.forEach

ES5 によって導入された、配列に付属するループには、配列を走査するという主な機能があります。実際のパフォーマンスは for よりも劣ります。

arr.forEach(function(value,i){
  console.log(&#39;forEach遍历:&#39;+i+&#39;--&#39;+value);
})

forEach メソッドにも、小さな欠陥: Break ステートメントを使用できない、ループを中断するために return ステートメントを使用して外側の関数に戻ることはできません。

4.map traversal

map は「マッピング」を意味し、その使用法は forEach と似ています。同様に、

break ステートメントは次の目的で使用できません。また、return ステートメントを使用して外部関数に戻ることもできません。

arr.map(function(value,index){
    console.log(&#39;map遍历:&#39;+index+&#39;--&#39;+value);
});

マップ トラバーサルでは、return ステートメントと戻り値の使用がサポートされています

var temp=arr.map(function(val,index){
  console.log(val);  
  return val*val           
})
console.log(temp);

forEach、map都是ECMA5新增数组的方法,所以ie9以下的浏览器还不支持

5.for-of遍历

ES6新增功能

for( let i of arr){
    console.log(i);
}
  • for-of这个方法避开了for-in循环的所有缺陷

  • 与forEach()不同的是,它可以正确响应break、continue和return语句 

for-of循环不仅支持数组,还支持大多数类数组对象,例如DOM NodeList对象。for-of循环也支持字符串遍历

JS对象遍历:

1.for-in遍历

for-in是为遍历对象而设计的,不适用于遍历数组。(遍历数组的缺点:数组的下标index值是数字,for-in遍历的index值"0","1","2"等是字符串)

for-in循环存在缺陷:循环会遍历对象自身的和继承的可枚举属性(不含Symbol属性)

for (var index in arr){
    console.log(arr[index]);
    console.log(index);
}

2.使用Object.keys()遍历

返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性).

var obj = {&#39;0&#39;:&#39;a&#39;,&#39;1&#39;:&#39;b&#39;,&#39;2&#39;:&#39;c&#39;};
Object.keys(obj).forEach(function(key){
     console.log(key,obj[key]);
});

3.使用Object.getOwnPropertyNames(obj)遍历

返回一个数组,包含对象自身的所有属性(不含Symbol属性,但是包括不可枚举属性). 

var obj = {&#39;0&#39;:&#39;a&#39;,&#39;1&#39;:&#39;b&#39;,&#39;2&#39;:&#39;c&#39;};
Object.getOwnPropertyNames(obj).forEach(function(key){
    console.log(key,obj[key]);
});

4.使用Reflect.ownKeys(obj)遍历

返回一个数组,包含对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举.  

var obj = {&#39;0&#39;:&#39;a&#39;,&#39;1&#39;:&#39;b&#39;,&#39;2&#39;:&#39;c&#39;};
Reflect.ownKeys(obj).forEach(function(key){
  console.log(key,obj[key]);
});

更多编程相关知识,请访问:编程入门!!

以上がJSのfor…inとfor…ofの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は博客园で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Python vs. JavaScript:コミュニティ、ライブラリ、リソースPython vs. JavaScript:コミュニティ、ライブラリ、リソースApr 15, 2025 am 12:16 AM

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへ:すべてがどのように機能するかC/CからJavaScriptへ:すべてがどのように機能するかApr 14, 2025 am 12:05 AM

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

JavaScriptエンジン:実装の比較JavaScriptエンジン:実装の比較Apr 13, 2025 am 12:05 AM

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

ブラウザを超えて:現実世界のJavaScriptブラウザを超えて:現実世界のJavaScriptApr 12, 2025 am 12:06 AM

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する(バックエンド統合)Apr 11, 2025 am 08:23 AM

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)next.jsを使用してマルチテナントSaaSアプリケーションを構築する方法(フロントエンド統合)Apr 11, 2025 am 08:22 AM

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScript:Web言語の汎用性の調査JavaScript:Web言語の汎用性の調査Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

SecLists

SecLists

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

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。