Zum Beispiel, wenn ich mache a [1000000] = 1; wird es Speicher für 1000000 Elemente oder nur für diesen verwenden?Sind JavaScript-Arrays assoziativ?
Antwort
Wären 1.000.000 Elemente erstellt?
Nein, Arrays sind spärlich, aber ihr Index wird persistent sein. EDIT: Eigentlich wäre ihre Spärlichkeit umsetzungsspezifisch, aber sie im Fall von a[1000000] = 1
spärlich zu halten, scheint mir eine logische Sache zu sein.
var a = [1, 2, 3, 4];
var x = a[1]; // -> x := 2
delete a[1];
var y = a[1]; // -> y := undefined
a[9] = 10;
var y = a[8]; // -> z := undefined
Sind JS assoziative Arrays?
JavaScript-Arrays sind eine Untergruppe von assoziativen Arrays (in dieser Indizes ganze Zahlen sein müssen, wie in KennyTM's answer gezeigt JavaScript-Objekte vollständig assoziativ sind.
var o = { "key1": "value1", "key2": "value2" };
var i = "key2";
var v = o[i]; // -> v := "value2"
Ob sie spärlich sind oder nicht, würde wahrscheinlich von der Implementierung abhängen. Ich würde es wagen zu erraten, dass die undefinierten Werte die dazwischen liegenden Werte initialisiert werden, um Speicher bei aktuellen Implementierungen zu erhalten. –
Ich hätte erwartet, dass sie spärlich sind, um Speicher und Zeit in der 'var a [1000000] = x' Situation zu sparen. Aber das ist sehr wahrscheinlich umsetzungsspezifisch, stimme ich zu. Eine Million "undefinierter" Werte zu initialisieren, scheint eine Verschwendung von Ressourcen zu sein. – Tomalak
Wenn Sie sie als Sparse-Arrays implementieren, würde dies den häufigen Fall (ohne Tausende undefinierter Werte) unnötig ineffizient machen. –
JS-Arrays werden automatisch wachsende Einstellung a [. 100] auf 1 auf einem leeren Array werden die ersten 99 Elemente mit „undefiniert“ bevöl
Eigentlich wird nichts * ausgefüllt *. Deshalb sind nicht nur die ersten Elemente * undefiniert * (im Gegensatz zu *, die mit undefiniertem * gefüllt sind), sondern alle Elemente (außer 'a [100]') sind "undefiniert". –
Um den Unterschied zu demonstrieren: 'a [1] = undefined'. Nun sind 'a.length === 2' und 'a [' 0 '] === undefined' und' a [1] === undefined', * aber * während "1" in a "wahr" ist , '0' in a 'ist' falsch '. – bobince
Sie Objektliteral als eine Art von ‚assoziative aray‘ in einigen Fällen verwenden kann.
var object = {
"first": "1",
"second": "2",
"third": "3",
"fourth": "4"
};
object.fifth = "5";
object.["sixth"] = "6";
Aber es hat seine Grenzen ... Es gibt keine magische 'Länge' Parameter und Sie haben keinen Zugriff auf Methoden, die jedes Array hat.
Im ECMAScript-Standard (§ 15.4), das einzige Besondere an Array ist, dass die length
Eigenschaft automatisch aktualisiert wird (und eine Reihe von Array-spezifischen Prototyp-Funktionen):
Array-Objekte geben spezielle Behandlung zu einer bestimmten Klasse von Eigenschaftsnamen. Ein Eigenschaftsname P (in Form eines String-Wertes) ist ein Arrayindex wenn und nur wenn
ToString(ToUint32(
P))
zu P gleich undToUint32(
P)
nicht gleich 2 -1.
...
Jedes Array-Objekt hat einelength
-Eigenschaft, deren Wert immer eine nichtnegative Ganzzahl kleiner als 2 ist. Der Wert derlength
-Eigenschaft ist numerisch größer als der Name jeder Eigenschaft, deren Name ein Array-Index ist. ...
Darüber hinaus ist ein Array nur ein Objekt, was bedeutet, dass es als assoziatives Array behandelt werden kann, although you shouldn't.
Heutzutage sollten die JS Motoren erfassen, ob die Anordnung dicht ist oder nur sehr spärlich und Schalter für eine lineare oder assoziative Array intern zwischen der Verwendung. In Ihrem Fall wird die JS-Engine keine Millionen Elemente zuweisen.
+1 - Vielen Dank für den entsprechenden Abschnitt der Spezifikation zitiert. Ich werde meine Antwort entsprechend anpassen. – Tomalak
- 1. Sind SHA1 und SHA256 assoziativ?
- 2. Sind Fließkommaoperationen in C assoziativ? mathematisch
- 3. Numpy's Punktprodukt nicht assoziativ
- 4. Ist `std :: common_type` assoziativ?
- 5. Convert Array assoziativ
- 6. Assoziativ-Array zu Json
- 7. Lese Assoziativ Arrays aus Datei
- 8. variadische Vorlagen Summenoperation links assoziativ
- 9. Beispiel einer Programmiersprache, die assoziativ bleibt?
- 10. js array assoziativ: indexOf ist keine Funktion
- 11. Multiple Links-Zuweisung mit JavaScript, wirklich richtig assoziativ?
- 12. Wie wird der Containertyp (Sequenz oder assoziativ) vom Iterator versendet?
- 13. php ersten Wert eines Arrays (assoziativ oder nicht)
- 14. Ändere ein assoziatives Array in ein indiziertes Array/erhalte ein Zend_Table_Row_Abstract als nicht assoziativ
- 15. 2-Wege-Cache assoziativ? Wie viele Bytes lese ich aus dem Speicher?
- 16. jQuery-Methode zum Zurückgeben von XML-Objekten, in denen zwei Felder gleich sind?
- 17. Aktionen sind zustandslos, aber Controller sind zustandslos?
- 18. Warum sind diese Standardparameter so definiert, wie sie sind?
- 19. Pandas Timestamp-Komponenten - einige sind Eigenschaften und einige sind Methoden?
- 20. Obwohl magic_quotes ausgeschaltet sind, sind immer noch Strings entgangen?
- 21. Sind alle Funktionen "noexcept", wenn Ausnahmen deaktiviert sind?
- 22. NSLayoutConstraint Stellen sind durchweg nil während andere Steckdosen sind nicht
- 23. Was sind die verschiedenen Techniken sind megamorphic Aufrufstellen effizienter
- 24. Zwei .NET-Objekte, die gleich sind nicht sagen, sie sind
- 25. Wo sind CAD-Apps geschrieben und wie sind sie organisiert?
- 26. Warum sind die Namenskonventionen von Jest so, wie sie sind?
- 27. Sind die Objekte einer Combobox leer, wenn sie leer sind?
- 28. Sind Callbacks immer asynchron?
- 29. Sind Meta-Schlüsselwörter empfindlich?
- 30. Sind Java Filter Singleton
Siehe auch: http: // stackoverflow.com/questions/1076658/javascript-array-associative-and-indexed – Pindatjuh
Es scheint, dass Sie hier zwei ganz andere Fragen stellen: Ob sie assoziativ sind (im Titel) und ob sie sparse sind (im Text). Tatsächlich sind diese beiden Facetten von JS-Arrays orthogonal (d. H. Die Spärlichkeit hat nichts mit Assoziativität zu tun). – Tomalak
Siehe auch: http://StackOverflow.com/questions/2039908/does-javascript-populate-empty-array-items/ – CMS