September 2010

So Mo Di Mi Do Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    

Mit “bug” 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:
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.
In letzter Zeit komme ich mir immer wieder einsam vor, wenn ich auf Xing unterwegs bin.  Die Anzahl der Mitglieder, die (jeweils) momentan online sind, ist verschwindent gering.  Ein Blick in Powersuche und dem Punkt Mitglieder, die kürzlich eingeloggt waren zeigt ein komplett anderes Bild:

xing_mitgliederproblem.png

2 Mitglieder aktuell, in der Liste der zuletzt eingeloggten werden 300 Mitglieder dargestellt.  Nun kann man daraus zwar nicht schließen, dass hier wirklich ein Bug besteht.  Denn schließlich ist nirgends spezifiziert, wie weit zurück die Powersuche geht.  Aber dass ein paar Sekunden, nachdem ich die Zahl entdeckt habe, wieder über 4.000 und kurz darauf über 8.000 Mitglieder online sind, ist schon etwas verwunderlich.  Zudem an Weihnachten anstelle der 2 eine 0 stand und ich definitiv online war ;).

Auch in anderen Blogs habe ich schon darüber gelesen, dass sich einige Personen über die Zahl gewundert hatten.  Es scheint also, als sei bei Xing gerade Weihnachtspause in der Entwicklungsabteilung :).