Ich bin Kodierung eine Menge von jährlichen Daten in JavaScript, und ich war in Erwägung, es zu Arrays hinzufügen, mit dem Jahr als Array-Index und die Daten in das Array setzen. Allerdings scheint Firebug anzugeben, dass JavaScript dies durch Auffüllen zweitausend ungerade Einträge in das Array mit "undefined" behandelt. Mit Hunderten von solchen Arrays kicking um im aktiven Speicher, bin ich besorgt, dass der Overhead von Hunderttausenden von nutzlosen Array-Elemente könnte beginnen, das Programm zu verlangsamen. Wird es das?
Antworten
Zu viele Anzeigen?Wenn Sie den Wert eines numerischen Indexes höher setzen als den aktuellen length
Ihres Arrays, die length
Eigenschaft betroffen ist.
Kurz gesagt, Sie sollten eine Object
:
var data = {};
data[year] = "some data";
// or
var data = {
2009: "2009 data",
2010: "2010 data"
};
Jetzt antworte ich auf die Überschrift der Frage: " Füllt JavaScript leere Array-Elemente auf? "
Nein, wie ich schon sagte, nur die length
Eigenschaft geändert wird (wenn nötig, nur wenn der hinzugefügte Index größer ist als der aktuelle length
), length
wird um einen Wert größer als der numerische Wert dieses Indexes erhöht.
El Array.prototype
Methoden arbeiten unter der Annahme, dass die Indizes des Array-Objekts bei Null beginnen.
Die vorherigen Indizes existieren nicht wirklich in der Array
Objekt, können Sie es testen:
var array = [];
array[10] = undefined;
array.hasOwnProperty(10); // true
array.hasOwnProperty(9); // false
Zusammenfassend lässt sich sagen, dass Arrays dazu gedacht sind, sequenzielle Indizes zu enthalten, beginnend bei Null. Wenn Ihre Eigenschaften diese Anforderungen nicht erfüllen, sollten Sie einfach ein Objekt verwenden.
Andererseits ist es manchmal einfacher, ein spärliches Array zu verwenden als ein benutzerdefiniertes Objekt, und Arrays haben so praktische Methoden zur Verfügung.
In einer Kalenderanwendung beginne ich mit Objekten für jedes verwendete Jahr, aber jedes Jahr besteht aus einem zwölfgliedrigen Array (Monate), und jeder "Monat" ist ein spärliches Array signifikanter Daten, deren Länge vom höchsten Datum dieses Monats abhängt, das irgendwelche Daten enthält.