Hi!
test = new Array();
test['test'] = new Array();
alert(test.length); // ergibt = 0Beispiel-2:
test = new Array();
test[0] = new Array();
alert(test.length); // ergibt = 1
Naja, die length-Eigenschaft gibt nicht die Anzahl der im Array gespeicherten Elemente an, sondern ist einfach eine Zahl, die groesser als jeder im Array vorkommende Index ist, wobei ein "Index" der Name einer Eigenschaft ist, den man als Zahl lesen kann. Alles klar? ;-)
Also, in JS ist ein Array nicht so ein richtiges Array wie in anderen Sprachen, sondern es ist ein Objekt mit vielen Eigenschaften. Man kann dann ein klassisches Array simulieren, indem man einfach die Namen der Eigenschaften so waehlt, dass sie in Zahlen umgewandelt werden koennen, also z.B. "0", "1", "2", ... Diese Eigenschaften nennt man dann Indizes. Solange man sich an dieses Schema haelt, wird immer automatisch die length-Eigenschaft angepasst, naemlich so, dass sie einfach eins groesser als der groesste Index ist, d.h. sie enhaelt immer die Anzahl der Elemente. Wenn Du jetzt aber eine andere Eigenschaft namens "test" einfuehrst, die man ja ganz klar nicht als Zahl interpretieren kann und die damit nicht als Index verwendet werden kann, na dann ist der ganze Spass mit length hinfaellig.
Uebrigens lassen sich auch ganz leicht Luecken ins Array einbauen, indem man nicht alle aufeinanderfolgenden Indizes verwendet. Hast Du die Eigenschaften "0", "1", 3", "4", "5" verwendet, so ist bei 2 eine Luecke. In length steht dann der Wert 6, obwohl Du nur 5 Elemente hast.
Das gilt uebrigens alles nur, wenn ich die ECMA-Spec richtig verstanden habe. Was die Browser machen - und hier sei insbesondere der IE genannt - muss damit nicht unbedingt immer uebereinstimmen.
So long
I am certain that some of our rhetoric must seem familiar to those who remember how World War Two started.
-- Dennis T. Brown (NC State University Raleigh) in einem Leserbrief an den Spiegel