molily: Funktion wird nicht ausgeführt

Beitrag lesen

Hallo,

Der Plus-Operator tut immer das, was man erwartet, solange nicht beide Operanden Number-Werte sind. Das sind sie beim Verarbeiten von User-Eingaben so gut wie nie.

Ist obiges Beispiel nicht sogar dafür geeignet stattdessen sogar das Folgende zu notieren?
p.innerHTML = name.concat(": ", message);

Möglich ist das, aber warum sollte diese Schreibweise besser sein? Ich finde sie nicht robuster und nicht lesbarer. Wegen des Methodenaufrufs wird sie wahrscheinlich um den Faktor 100 langsamer sein.

Die concat-Methode bei Strings habe ich in freier Wildbahn noch nie gesehen. Wenn ich nicht einmal an der SELFHTML-Methodenreferenz gearbeitet hätte, wäre es mir wahrscheinlich bis heute nicht über den Weg gelaufen. Das scheint mir ein schlecht umgesetztes Java-Relikt zu sein.

Im obigen Beispiel geht man davon aus, dass name ein nicht-null, nicht-undefined Wert ist, der die Methode concat bietet. Kurz gesagt, ich gehe stillschweigend davon aus, dass es ein Wert vom Typ String ist.

Wenn ich diese Annahme mache, dann ist das einfachere name + ': ' + message genauso gut.

Wenn ich nicht stillschweigend davon ausgehe, dass es ein String ist, dann ist name + ': ' + message sogar besser. Weil der String-Literal ': ' als Operand dafür sorgt, dass der Wert von name gegebenenfalls in einen String umgewandelt wird, falls der Wert eines anderen Types ist.

Wenn ich mit verschiedenen Typen rechne und die Typumwandlung explizit machen will, so sind folgende Idiome verbreitet:

  • String-Funktion anwenden: String(foo) + String(bar)

  • Leeren String-Literal voranstellen: "" + foo + bar

Dieser String-Literal ist »ansteckend« und sorgt dafür, dass die folgende +-Operation mindestens einen String-Operanden hat. Das pflanzt sich fort auf die nachfolgenden +-Operationen, sodass das Endergebnis ein String sein muss.

Grüße
Mathias