Javascript-Problem: Array mit einem (boolschen) Wert
Gestern habe ich an einem kleinen Spaß-Projekt gearbeitet, worin ein durch Javascript populiertes Koordinatensystem existiert. In dieses Koordinatensystem werden Elemente gemalt, die selbst als Koordinatensystem definiert sind. Jeder Punkt hat dabei einen boolschen Wert, also entweder 1 oder 0:
Soweit, so gut. Es kam dann der Augenblick, als ich ein neues Element mit nur einem Punk auf der x-Achse definiert habe:
Die Lösung war dann, den boolschen Wert als
Ach ja, das Ganze habe ich bisher nur im Firefox 3.0.11 getestet; wie es in den anderen Browsern aussieht, kann ich derzeit nicht sagen.
var element = new Array(
new Array( 0, 1, 1, 0 ),
new Array( 1, 0, 1, 0 )
);
Mit zwei verschachtelten for-Schleifen kann man nun schön über das zweidimensionale Array drübergehen und die Elemente in das Koordinatensystem an die entsprechende Stelle malen.Soweit, so gut. Es kam dann der Augenblick, als ich ein neues Element mit nur einem Punk auf der x-Achse definiert habe:
var element = new Array(
new Array( 1 ),
new Array( 1 )
);
Dieses Element wurde nie gezeichnet, weil Javascript aus irgendeinem Grund die Anzahl der Elemente in der zweiten Dimension des Arrays als undefiniert ansah. Hier mal ein Beispiel:
var element = new Array(
new Array( 0, 1, 1, 0 ),
new Array( 1, 0, 1, 0 )
);
alert(element[0][1]); // --> "1"
var element2 = new Array(
new Array( 1 ),
new Array( 1 )
);
alert(element2[0][0]); // --> "undefined"
Eine ganze Weile habe ich nach dem Problem gesucht, weil ich einfach keines sehen konnte. Klar, für mich ist hier auch immer noch keines ersichtlich und ich würde das Verhalten als Bug ansehen. Warum Javascript einen einzelnen boolschen Wert im Array als leer ansieht, ist mir nicht verständlich.Die Lösung war dann, den boolschen Wert als
String anzugeben, was IMHO ein wenig doof ist (und natürlich auch mehr Schreibarbeit bedeutet, solange die Elemente noch von Hand definiert werden. Der Vollständigkeit wegen hier ein Komplettbeispiel:
var element = new Array(
new Array( 0, 1, 1, 0 ),
new Array( 1, 0, 1, 0 )
);
alert(element[0][1]); // --> "1"
var element2 = new Array(
new Array( 1 ),
new Array( 1 )
);
alert(element2[0][0]); // --> "undefined"
var element3 = new Array(
new Array( "1" ),
new Array( "1" )
);
alert(element3[0][0]); // --> "1"
Vielleicht kann mir jemand auf die Sprünge helfen, warum Javascript dieses Verhalten an den Tag legt. Ich würde das gerne mal wissen :).Ach ja, das Ganze habe ich bisher nur im Firefox 3.0.11 getestet; wie es in den anderen Browsern aussieht, kann ich derzeit nicht sagen.
0 TrackBacks
Folgende Einträge anderer Blogs beziehen sich auf den Eintrag Javascript-Problem: Array mit einem (boolschen) Wert
TrackBack-URL dieses Eintrags: http://www.rainboxx.de/mt-tb.cgi/66

Feed dieses Blogs abonnieren
2 Kommentare
Die Lösung:
Wen man mit
ein Array aufmacht, steht in der Klammer die gewünschte Länge des Arrays. Man versuche danach mal
Erst ab zwei angegebenen Werten wird ein Array mit diesen Elementen daraus:
Das ist dokumentiertes Verhalten, wenn auch kein besonders praktisches.
Aus diesem Grund definiert man Arrays lieber in JSON-Syntax:
Zweidimensionale Arrays dann folgendermaßen:
Oh Mann, das ist ja höchst seltsame Syntax… Danke für den Tipp, Dragan, ich werd's mir auch für mein nächstes JS-Projekt merken.