Mit “array” getaggte Einträge von rainboxx - Matthias Dietrich
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.

Feed dieses Blogs abonnieren
Neueste Kommentare
Philipp on Schade: kein erweiterter Heise-Newsfeed: Hi, ich wü
Ano Nym on Schade: kein erweiterter Heise-Newsfeed: Ich würde
Jonas on Schade: kein erweiterter Heise-Newsfeed: Ich wäre a
mots on Schade: kein erweiterter Heise-Newsfeed: Ich würd d
Bastian on Zwei Jahre ist es her...: Hej, willk
Heiko W. Rupp on PostgreSQL und Volltextsuche: Im letzten
Josef on Schade: kein erweiterter Heise-Newsfeed: Würde mich
Martin on Schade: kein erweiterter Heise-Newsfeed: ich reihe
Guido on Schade: kein erweiterter Heise-Newsfeed: Dich hätte