Heim >Web-Frontend >js-Tutorial >Was Sie bei der Verwendung von For-Schleifen in Javascript beachten sollten

Was Sie bei der Verwendung von For-Schleifen in Javascript beachten sollten

巴扎黑
巴扎黑Original
2017-08-22 11:11:541796Durchsuche


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 JavaScript
function 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.indexOf

angepasst 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);
//gibt

aus Mit anderen Worten: Die Methode
1
2function(){…}
indexOf

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 .forEach

ist 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 von

for(var i=0;i ähnlich dieser Schleife, weil JavaScript Es gibt Es gibt keine Variablen auf Codeblockebene, daher ist die Zugriffsberechtigung von i hier tatsächlich die Methode, in der sie sich befindet. In einigen Büchern wird Programmierern empfohlen, solche Variablendeklarationen an einem Ort zu platzieren, aber intuitiv betrachtet ist dies in den meisten Fällen nicht sinnvoll genug.

for (name in object)
 { if (object.hasOwnProperty(name))
 { .... } }

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:

Schließlich beinhaltet Googles JavaScript-Styleguide auch diese Einschränkung:

for(let i =0; i < a.length; i++)
Das Obige ist der gesamte Inhalt dieses Artikels über die Probleme, die bei der Verwendung von for-Schleifen in JavaScript beachtet werden sollten – mit einer Zusammenfassung der Fragen, die hoffentlich für zukünftige Arbeiten hilfreich sein werden Studieren Sie und heißen Sie alle Brancheninsider willkommen, die Kritik und Vorschläge geäußert haben.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn