suchen
HeimWeb-Frontendjs-TutorialWas ist der Unterschied zwischen for…in und for…of in JS?

Dieser Artikel stellt Ihnen den Unterschied zwischen for...in und for...of in JavaScript vor. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Was ist der Unterschied zwischen for…in und for…of in JS?

Verwandte Empfehlungen: „Javascript-Video-Tutorial

Der Unterschied zwischen for...in und for...of

1 Beim Durchlaufen eines Arrays wird normalerweise eine for-Schleife verwendet

ES5 Sie können forEach verwenden. ES5 hat die Funktion, Arrays wie Map, Filter, Some, Every, Reduce, ReduceRight usw. zu durchlaufen, aber ihre Rückgabeergebnisse sind unterschiedlich. Aber Wenn Sie foreach verwenden, um das Array zu durchlaufen, können Sie die Schleife nicht mit break unterbrechen und Sie können nicht mit return zur äußeren Funktion zurückkehren.

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. Probleme beim Durchlaufen von Arrays

1 Der Index ist eine Zeichenfolgenzahl und kann keine direkten geometrischen Operationen ausführen

2. Die Durchlaufreihenfolge stimmt möglicherweise nicht mit der tatsächlichen Reihenfolge überein array

3 .Die Verwendung von for in durchläuft alle aufzählbaren Eigenschaften des Arrays, einschließlich Prototypen. Zum Beispiel ist die Prototypmethode Methode und das Namensattribut von Shangli

, sodass for in besser zum Durchlaufen von Objekten geeignet ist. Verwenden Sie for in nicht zum Durchlaufen von Arrays.

Wie können wir also zusätzlich zur Verwendung einer for-Schleife das Array einfacher und korrekter durchlaufen, um unsere Erwartungen zu erfüllen (das heißt, ohne die Methode und den Namen zu durchlaufen)? Das for of in ES6 ist noch besser.

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);
}

Denken Sie daran, dass bei „for“ der Index (d. h. der Schlüsselname) des Arrays durchlaufen wird, während bei „for“ die Werte der Array-Elemente durchlaufen werden.

for durchläuft nur die Elemente im Array, enthält jedoch nicht die Prototypattributmethode und den Indexnamen des Arrays Schlüsselnamen von Objekten

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 können zur Prototypmethode von myObject durchlaufen werden. Wenn Sie die Prototypmethode und -eigenschaften nicht durchlaufen möchten, können Sie sie innerhalb der Schleife beurteilen Eigenschaft ist eine Instanzeigenschaft des Objekts for..of eignet sich zum Durchlaufen von Zahlen/Array-Objekten/Zeichen. String/Map/Set usw. verfügen jedoch über eine Sammlung von Iteratorobjekten, da es im Gegensatz zu forEach() kein Iteratorobjekt gibt. , kann es korrekt auf Break-, Continue- und Return-Anweisungen reagieren

for-of-Schleife Gewöhnliche Objekte werden nicht unterstützt, aber wenn Sie die Eigenschaften eines Objekts durchlaufen möchten, können Sie eine for-in-Schleife verwenden (was auch seine Aufgabe) oder die eingebaute Object.keys()-Methode:

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

Iterieren über die Karte Destrukturierung eignet sich zum Beispiel für Objekte;

Object.prototype.method=function(){
  console.log(this);
}
var myObject={
  a:1,
  b:2,
  c:3
}
Nachdem Sie das myObject hinzugefügt haben. toString()-Methode zum Objekt hinzufügen, können Sie das Objekt in eine Zeichenfolge konvertieren. Wenn Sie myObjectSymbol.iterator zu einer beliebigen Objektmethode hinzufügen, können Sie dieses Objekt durchlaufen.

Angenommen, Sie verwenden jQuery, obwohl Sie die darin enthaltene .each()-Methode sehr mögen, möchten Sie dennoch, dass das jQuery-Objekt auch for-of-Schleifen unterstützt:
  • for (var key of Object.keys(someObject)) {
      console.log(key + ": " + someObject[key]);
    }
  • Alle Objekte mit Symbol.iterator gelten als iterierbar. In den folgenden Artikeln werden Sie feststellen, dass das Konzept iterierbarer Objekte fast in der gesamten Sprache verwendet wird, nicht nur in der for-of-Schleife, sondern auch in den Map- und Set-Konstruktoren, der Destrukturierungszuweisung und dem neuen Spread-Operator. Die
  • for...of-Schritte
or-of-Schleife ruft zunächst die Symbol.iterator-Methode der Sammlung auf und gibt dann ein neues Iteratorobjekt zurück. Das Iteratorobjekt kann ein beliebiges Objekt mit einer .next()-Methode sein; die for-of-Schleife ruft diese Methode wiederholt auf, einmal für jede Schleife. Dieser Code ist zum Beispiel der einfachste Iterator, den ich finden kann:

  • for (var [key, value] of phoneBookMap) {
       console.log(key + "'s phone number is: " + value);
    }

Extension


  • JS-Array-Traversal:

    1. Gewöhnliche for-Schleife
  • jQuery.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];


    2 . Optimierte Version der for-Schleife

Verwenden Sie Variablen zum Zwischenspeichern der Länge, um eine wiederholte Erfassung der Länge zu vermeiden. Der Optimierungseffekt ist offensichtlich, wenn das Array groß ist array Schleife, die Hauptfunktion besteht darin, das Array zu durchlaufen. Die tatsächliche Leistung ist schwächer als bei for

var zeroesForeverIterator = {
 [Symbol.iterator]: function () {
   return this;
  },
  next: function () {
  return {done: false, value: 0};
 }
};
forEach. Diese Methode weist auch einen kleinen Fehler auf: Sie können die Schleife weder mit der break-Anweisung noch mit der return-Anweisung unterbrechen um zur äußeren Funktion zurückzukehren.

4.map traversalmap bedeutet „Zuordnung“ und wird ähnlich wie forEach verwendet. Ebenso können Sie die Schleife nicht mit der Break-Anweisung unterbrechen und auch nicht mit der Return-Anweisung zum Äußeren zurückkehren Funktion.

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

Map Traversal unterstützt die Verwendung von Rückgabeanweisungen und Rückgabewerten

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]);
});

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

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen for…in und for…of in JS?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Dieser Artikel ist reproduziert unter:博客园. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
JavaScript -Engines: Implementierungen vergleichenJavaScript -Engines: Implementierungen vergleichenApr 13, 2025 am 12:05 AM

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Jenseits des Browsers: JavaScript in der realen WeltJenseits des Browsers: JavaScript in der realen WeltApr 12, 2025 am 12:06 AM

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Apr 11, 2025 am 08:23 AM

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)Apr 11, 2025 am 08:22 AM

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

JavaScript: Erforschung der Vielseitigkeit einer WebspracheJavaScript: Erforschung der Vielseitigkeit einer WebspracheApr 11, 2025 am 12:01 AM

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

Die Entwicklung von JavaScript: Aktuelle Trends und ZukunftsaussichtenDie Entwicklung von JavaScript: Aktuelle Trends und ZukunftsaussichtenApr 10, 2025 am 09:33 AM

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

Entmystifizieren JavaScript: Was es tut und warum es wichtig istEntmystifizieren JavaScript: Was es tut und warum es wichtig istApr 09, 2025 am 12:07 AM

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Ist Python oder JavaScript besser?Ist Python oder JavaScript besser?Apr 06, 2025 am 12:14 AM

Python eignet sich besser für Datenwissenschaft und maschinelles Lernen, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python ist bekannt für seine prägnante Syntax- und Rich -Bibliotheks -Ökosystems und ist für die Datenanalyse und die Webentwicklung geeignet. 2. JavaScript ist der Kern der Front-End-Entwicklung. Node.js unterstützt die serverseitige Programmierung und eignet sich für die Entwicklung der Vollstapel.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

EditPlus chinesische Crack-Version

EditPlus chinesische Crack-Version

Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.