Obwohl Arrays Objekte in JavaScript sind, wird nicht empfohlen, eine für die Schleife zu verwenden, um ein Array zu durchqueren. In der Tat gibt es viele Gründe, uns daran zu hindern, eine für Arrays in Schleife zu verwenden.
Denn die für die in der Schleife wird alle Eigenschaften der Prototypkette aufgezählt, und der einzige Weg, um zu verhindern, besteht darin, HasownProperty zum Richter zu verwenden, was viel langsamer als die Normale für die Schleife sein wird.
Durchqueren
Damit eine optimale Leistung für das Durchqueren eines Arrays ist, ist es am besten, den Klassiker für die Loop zu verwenden.
Die Codekopie lautet wie folgt:
var list = [1, 2, 3, 4, 5, ...... 100000000];
für (var i = 0, l = list.length; i <l; i ++) {
console.log (Liste [i]);
}
Hier gibt es einen zusätzlichen Trick, der die Länge des Arrays nach l = list.length zwischenspeichert.
Obwohl die Eigenschaftslänge im Array selbst definiert ist, befindet sich bei jeder Durchquerung der Schleife immer noch über Kopf. Obwohl die neuesten JavaScript -Engines für diese Situation möglicherweise Leistungsoptimierungen durchgeführt haben, können Sie nicht garantieren, dass Ihr JavaScript -Code immer in diesem Browser ausgeführt wird.
Tatsächlich sind Schleifen ohne Cache -Längen viel langsamer als Schleifen mit Cache -Längen.
Längenattribut
Obwohl das Längenattribut nur die Anzahl der Elemente im Array durch die Getter -Methode zurückgibt, kann das Array durch die Setter -Methode abgeschnitten werden.
Die Codekopie lautet wie folgt:
var foo = [1, 2, 3, 4, 5, 6];
foo.length = 3;
foo; // [1, 2, 3]
foo.length = 6;
foo.push (4);
foo; // [1, 2, 3, undefiniert, undefiniert, undefiniert, 4]
Wenn Sie dem Attribut Längen eine kleinere Nummer zugewiesen haben, wird das Array abgeschnitten. Wenn es eine größere Zahl zugewiesen wird, wird das Array nicht abgeschnitten.
Zusammenfassen
Für eine optimale Leistung wird empfohlen, eine für die Schleife anstelle eines für in der Schleife zu verwenden, während das Längenattribut zwischengespeichert wird.
Es gibt auch Array -Objekte, die keine Methode haben, nur eine eindeutige Attributlänge. String -Objekte haben Längenmethoden ~~