2 Stimmen

Seltsames Problem mit Javascript-Objekten

Hier ist ein einfaches js-Testskript

<script>
var testarray = new Array();
testarray['length'] = "1,2,3,4,5";
alert(testarray['length']);
</script>

Wenn Sie es ausführen, erhalten Sie die folgende Fehlermeldung:

Der Array-Länge muss eine endliche positive Zahl zugewiesen werden

Haben Sie eine Idee, woran das liegt und wie man das Problem beheben kann?

Hinweis: Wenn Sie "Länge" in etwas anderes ändern, wird der Inhalt des Objekts ohne Probleme angezeigt.

10voto

Sean Patrick Floyd Punkte 283617

Array.Länge

Array.length ist eine eingebaute Eigenschaft des Array Objekt.

Sie können ihn nur auf einen ganzzahligen Wert setzen:

Der Wert der Eigenschaft length ist eine ganze Zahl mit positivem Vorzeichen und einem Wert kleiner als 2 hoch 32 (2 32 ).

Sie können die Eigenschaft length festlegen, um ein Array jederzeit abzuschneiden. Wenn Sie ein Array durch Ändern seiner Längeneigenschaft erweitern, erhöht sich die Anzahl der tatsächlichen Elemente nicht. Wenn Sie beispielsweise Länge auf 3 setzen, während sie derzeit 2 beträgt, enthält das Array weiterhin nur 2 Elemente.

Referenz:


Javascript-Objekte

Ich vermute, Sie wollen eine Object , nicht ein Array :

var testobj = {};
testobj['length'] = "1,2,3,4,5";
alert(testobj['length']);

Natürlich gibt es einige alternative Syntaxmöglichkeiten:

Die erste Zeile ist eine Abkürzung für:

var testobj = new Object();

Und die Notation in eckigen Klammern kann durch die Punktnotation ersetzt werden:

testobj.length = "1,2,3,4,5";
alert(testobj.length);

(Eckige Klammern und Punkte können natürlich auch gemischt werden)

3voto

T.J. Crowder Punkte 948310

Nur als Ergänzung zu Sean's ausgezeichnete Antwort Bei JavaScript können Sie für den Zugriff auf Objekteigenschaften entweder die Punkt- oder die Klammerschreibweise verwenden. So:

var a = [];          // Same thing as a = new Array();
alert(a.length);     // alerts 0
alert(a['length']);  // ditto
var x = 'len';
alert(a[x + "gth"]); // ditto

und in ähnlicher Weise

var a = [];
a.length = 3;        // That's fine, the array's length is now 3
a['length'] = 4;     // And now it's four
var x = 'len';
a[x + "gth"] = 5;    // And now it's five

Sie haben also versucht, die Länge (einer Zeichenkette) festzulegen. Die length Eigenschaft von Array-Instanzen ist speziell und muss (wie Sie herausgefunden haben) ein nicht-negativer, endlicher, ganzzahliger Wert sein.


Tangente : In der Tat, die length Eigenschaft ist eine von nur drei Besonderheiten von Arrays (von denen eine eigentlich gar nicht so besonders ist). Die nur Unterschiede zwischen einem Array und einem einfachen Objekt sind:

  1. Es gibt eine spezielle Klasse von Eigenschaftsnamen, die numerische, dezimale Zeichenfolgen sind. Wir neigen dazu, sie "Array-Indizes" zu nennen und sie als Zahlen zu schreiben, aber das sind sie nicht. a[0] wirklich bedeutet a["0"] was bedeutet: "die Eigenschaft '0' des Objekts a ", genau wie a["foo"] bedeutet "die Eigenschaft 'foo' des Objekts a .

  2. Das Besondere length Eigentum: Er ist immer um eins größer als der numerische Wert der Eigenschaft mit dem höchsten dezimalen numerischen Stringnamen (z. B. der höchste "Array-Index") oder der von Ihnen festgelegte Wert, je nachdem, welcher höher ist. Also:

    var a = [];
    a[0] = "foo"; // a.length is automatically set to 1
    a[4] = "bar"; // a.length is automatically set to 5
    a.length = 3; // a.length is now 3, and any properties that have numeric
                  // decimal string names of "3" or higher are deleted, thus:
    alert(a[4]); // "undefined"
  3. Array-Instanzen werden von der Array Konstruktorfunktion und haben daher den Prototyp Array.prototype mit all seinen raffinierten und nützlichen Funktionen.

Das war's. Sie unterscheiden sich ziemlich stark von den Arrays in fast allen anderen Sprachen. Sie sind zum Beispiel keine zusammenhängenden Speicherblöcke (obwohl eine Implementierung sie auf diese Weise implementieren kann, wenn sie möchte; es wäre wahrscheinlich ineffizient).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X