Die Verwendung einer Schleife ist praktisch, wenn Sie denselben Code immer wieder ausführen möchten, jedes Mal mit unterschiedlichen Werten.
Oft verwenden wir for-Schleifen, und die for-Schleifenabteilung durchläuft oft ein Array. Oft schreiben wir es so:
// 次佳的循环 for (var i = 0; i < myarray.length; i++) { // 使用myarray[i]做点什么}
Code wie dieser Obwohl es kein großes Problem gibt , erhält jede Schleife die Länge des Arrays, was Ihren Code reduziert, insbesondere wenn myarray kein Array, sondern ein HTMLCollection-Objekt ist.
Sehen Sie sich den folgenden Code noch einmal an:
for (var i = 0, max = myarray.length; i < max; i++) { // 使用myarray[i]做点什么}
Dieser Code erhält die Länge des Arrays nur einmal, was mit einer Verbesserung der Qualität des Codes einhergeht Durch eine einzelne Variablenform können Sie die Variablen wie folgt aus der Schleife nehmen:
Zusammenfassung der Probleme bei der Verwendung von for-Schleifen durch JavaScriptfunction looper() { var i = 0, max, myarray = []; // ... for (i = 0, max = myarray.length; i < max; i++) { // 使用myarray[i]做点什么 }}
Die Diskussion dieses Problems stammt ursprünglich von Die interne E-Mail des Unternehmens. Ich zeichne nur die Diskussion zu diesem Problem auf.
Bei der Lokalisierung des Problems stellten einige Projektteams fest, dass bei Verwendung von
„for(x in array)“unerwartet x im IE-Browserwert auftauchte. Insbesondere wenn die Methode
Array.prototype.indexOfangepasst wird (z. B. aufgrund einer bestimmten Prototypverschmutzung), kann dies daran liegen, dass die alte Version des IE-Browsers diese nicht unterstützt array.indexOf-Methode. Und Entwickler möchten sie verwenden, daher kann ein solcher Browser ein solches Problem haben:
Array.prototype.indexOf = function(){...}; var arr = [1, 2];for (x in arr) console.log(x);
aus Mit anderen Worten: Die Methode
1 2function(){…}
wird übrigens ausgegeben. Die Lösung ist einfach: Fügen Sie diese Methode entweder nicht hinzu oder verwenden Sie eine Schleife wie „
for (i=0; i < array.length; i++)“usw. Aber was ist die Natur des Problems? Einige Leute spekulieren, dass dies daran liegen könnte, dass die Verwendung von
for(x in obj)tatsächlich dazu dient, ein Objekt zu durchlaufen, und die Implementierung eines Arrays tatsächlich dieselbe ist wie die von gewöhnlichen Objekten, außer dass key ist Es ist nur ein gegebener Wert:
In einer Stackoverflow-Frage und -Antwort wurde auch erwähnt, dass es einen Unterschied zwischen der Verwendung von for...in und for(;;) beim Durchlaufen gibt ein Array. Die Bedeutung von Ersterem besteht darin, Objekte aufzuzählen. Es gibt zwei Probleme:{0:"something", 1:"something else"}
Die Reihenfolge der Aufzählung kann nicht garantiert werden.
🎜> ist für
Array.prototype nicht korrekt. Bezüglich der Unterstützung von .forEachist aus dieser Tabelle deutlich ersichtlich, dass IE8 und darunter nicht genau unterstützt werden können:
Es besteht auch Kompatibilität mit der forEach-Methode. Tatsächlich verfügen alle wichtigen JavaScript-Frameworks (wie jQuery, Underscore, Prototype usw.) über sichere und allgemeine Implementierungen der For-Each-Funktionalität. Im for in-Kapitel von JSLint wird auch erwähnt, dass die for in-Anweisung das Durchlaufen der Attributnamen des Objekts ermöglicht, aber auch die über die Prototypenkette geerbten Attribute durchläuft, was in vielen Fällen der Fall ist wird andere Erwartungen als Fehler hervorrufen. Es gibt eine grobe Lösung:
Jemand erwähnte auch das Problem bei der Verwendung vonfor(var i=0;i Die Verwendung von „let“, das in JavaScript 1.7 eingeführt wurde, kann dieses Problem lösen und i zu einer echten Variablen auf Codeblockebene machen: Das obige ist der detaillierte Inhalt vonWas Sie bei der Verwendung von For-Schleifen in Javascript beachten sollten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!for (name in object)
{ if (object.hasOwnProperty(name))
{ .... } }
for(let i =0; i < a.length; i++)