Rolf B: Javascript grundlegende Fragen

Beitrag lesen

Hallo Tobias,

der Browser hat zwei Meinungen zu "Quelltext!". Einmal das, was der Server gesendet hat. Zum anderen das, was aktuell das DOM bildet. Das DOM kann jederzeit per JavaScript verändert werden; man kann auch Script-Blöcke per JavaScript hinzufügen. Wenn der Script-Block aber bereits in der von PHP generierten HTTP-Antwort steht, solltest Du ihn per Strg+U auch finden können. Gibt es einen Link auf diese Seite? Oder versteckt sie sich in irgendeinem Intranet?

JavaScript Fehler sieht man übrigens im Konsole-Teil der Entwicklerwerkzeuge. Du musst etwas aufpassen, die Konsole wird nach einer Seitennavigation nicht gelöscht, du siehst also ggf. Fehler, die von der vorigen Seite stammen. Es gibt aber einen "Löschen" Knopf.

Das Thema "Dezimaltrennzeichen" muss man etwas differenzierter betrachten. In deinem Beispiel werden keine Zahlen übertragen, sondern Zeichenketten. Schauen wir uns mal was anderes an:

<script>
  array = [{
    'wert1': '1.00',
    'wert2': 2.00,
    'wert3': '3,00',
    'wert4': 4,00
  }];
</script>

Das ist ein Array mit einem Eintrag. Dieser Eintrag ist ein Objekt mit 4 Eigenschaften - wert1, wert2, wert3 und wert4. Eigenschaftennamen müssen in normalem JavaScript nicht in Anführungszeichen oder Hochkomma stehen, das ist nur in einem JSON-String zwingend. In normalem JavaScript stört es aber auch nicht.

Die Eigenschaft wert1 bekommt eine Zeichenkette als Wert. Ob diese Zeichenkette nun eine Zahl darstellt, ob da ein Dezimalkomma drin steht oder ein Dezimalpunkt, das ist JavaScript total egal. Deswegen funktioniert aus Sicht von JS wert1 genausogut wie wert3.

Bei wert2 und wert4 liegt die Sache anders. Hier steht der Wert nicht in Anführungszeichen, d.h. wir haben nun aus Sicht des JavaScript-Interpreters eine Fließkommazahl vorliegen, und die muss den JavaScript-Regeln für Fließkommazahlen genügen. Und das heißt: DezimalPUNKT. Das Komma, bei wert4, hat eine andere Bedeutung. Welche genau, hängt vom Kontext ab. Hier ist es ein Objekt-Literal und das Komma würde zu einer weiteren Eigenschaft überleiten. Für die fehlt dann aber ein erlaubter Eigenschaftenname und der Doppelpunkt, und JavaScript wird entsprechend herummaulen. Es mault aber erst wegen wert4. Wert2 ist in Ordnung, und wert3 auch.

Aber: Es kann natürlich Folgefehler geben, wenn man einen String wie '2,15' später als Zahl weiterverwenden will. Das hängt vom Gesamtkunstwerk ab, in dem dieser Ablauf eingebettet ist. Es gibt aber durchaus Möglichkeiten, so etwas zu lösen. Wenn man bspw. mit parseFloat aus '2,15' die Javascript-Fließkommazahl 2.15 machen will, kann man mit der replace-Funktion erstmal aus dem Komma einen Punkt machen. Wenn man '2,15' an PHP zurückgibt und der Wert dort als 2.15 verarbeitet werden soll, muss das auf der PHP Seite geschehen.

Wenn man keinen Internet Explorer vor Version 11 unterstützen muss, kann man auch die locale-Eigenschaften der Number-Klasse in JavaScript nutzen, um Zahlen abhängig vom kulturellen Kontext des Anwenders korrekt zwischen interner (als float-Wert) und externer (als string) Darstellung umzuwandeln. Einen ZWANG, dem User Zahlen mit Dezimalpunkt zu präsentieren, gibt es nicht. Nur die damit verbundene Arbeit für den Programmierer. Ob dein Programmierer nun faul war, oder unwissend, kannst nur du wissen.

Rolf

--
sumpsi - posui - clusi