Kennen Sie JavaScript von Microsoft?

Nun denken Sie, wer interessiert sich schon für eine spezielle Variante von JavaScript. Das ist doch Standard (ECMA) und in alle Browsern je nach Version gleich. Ja - es gibt verschiedene DOM-Implementationen und Box-Modelle; da muss man sich drum kümmern. Aber doch nicht um JavaScript.

Hab ich bis gestern auch gedacht. Aber da ist mir was passiert. Probieren Sie mal folgendes kleine Skript aus:

<script>alert("a:b:c".split(/(:)/));<script>

Zu erwarten ist folgende Ausgabe: a,:,b,:,c. Warum? Weil in der Beschreibung von JavaScript steht: Wenn der 'Begrenzer' ein RegExp mit einem in Klammern stehenden Teileausdruck ist, wird der Begrenzungstext, auf den der Teileausdruck passt, mit in das zurückgegebene Array aufgenommen. Nochmal auf Englisch: If separator is a regular expression that contains capturing parentheses, then each time separator is matched the results (including any undefined results) of the capturing parentheses are spliced into the output array.

Und nun probieren Sie mal statt des Firefox den Internet Explorer. Was kommt raus? a,b,c.

Ja und es scheint ein Feature zu sein, wenn man den Recherchen anderer glauben darf. Denn auch in weiteren MS-Programmiersprachen tritt dieses Phänomen auf. Nun werden Sie sagen: Wer braucht das denn? Warum ist das so wichtig? Nun, man kann mit dem split Strings parsen und manchmal möchte man irgend etwas zerlegen ohne dabei Text zu verlieren. Aber ich finde, die Frage nach der Anwendung nicht vorrangig, sondern ich finde es schlimm, dass man sich nicht auf einen Standard verlassen kann, ob man ihn nun wirklich einsetzt oder nicht, ist dabei nicht entscheidend.

Es gibt eine Lösung dieses Problems in Steven Levithan Blog, die gut funktioniert.