Noch ein paar Ergänzungen von mir.
Wie ich selbst erst in diesem Forum gelernt habe (Danke an Struppi u. Co.!)
.. (und Peter S.)
gibt es in JavaScript eigentlich keine Assoziativen Arrays (also Arrays mit Strings als Index) - genau genommen sind das Objekte. Diese kannst du zwar ähnlich wie Arrays behandeln:
Arrays sind Objekte.
Der Punkt ist, das in JS der [] Operator auch zum Zugriff auf Objekteigenschaft genutzt werden kann. D.h....
var testary = new Array();
testary["test1"] = 5;
testary["test2"] = 6;
... obwohl hier scheinbar der Index Operator genutzt wird, fügst du so nur neue Eigenschaften des Objektes hinzu. Das funktioniert grundsätzlich für alle Objekte:
var x = new String();
x['a'] = 'test';
alert(x.a);
var x = new Option();
x['a'] = 'test';
alert(x.a);
var x = new Number();
x['a'] = 'test';
alert(x.a);
var x = new Image();
x['a'] = 'test';
alert(x.a);
Weil eben alle Objekte, auch Array, von Object abgeleitet sind.
var x = new Object();
x['a'] = 'test';
alert(x.a);
, genau genommen entspricht die obere schreibweise aber einem
var testary = new Object();
testary.test1 = 5;
testary.test2 = 6;Aus diesem Grund funktioniert "testary.length" nicht, weil dies nur auf "echte" Arrays anwendbar ist.
Funktionieren tut das Array trotz allem, nur hat man dadurch das eine neue Eigenschaft hinzugefügt wurde, kein neues Array Element eingefügt, also bleibt die Länge des Array weiterhin bei null.
Was du aber z.B. machen kannst, ist eine for...in schleife:
var ObjectSize = 0;
for (var property in testary) {
ObjectSize++;
}Nach Durchlaufen dieser Schleife hast Du in "ObjectSize" die Grösse des Objektes (die "länge" deines Arrays, wenn du so willst) stehen.
Und man sollte eben tunlichst vermeiden von einem Array zu sprechen oder gar eins zu benutzen, da dann plötzlich seltsame Widersprüche auftauchen können:
var x = new Array();
x['a'] = 'test';
x['200'] = 'hallo';
alert('Länge des Arrays:' + x.length);
var ObjectSize = 0;
for (var property in x) ObjectSize++;
alert('Länge des Arrays:' + ObjectSize);
Struppi.