Hallo Franz,
if (typeof element.value == 'undefined') {
...
}
das würde Dir isoliert betrachtet tatsächlich helfen, aber das Ergebnis wäre unterm Strich nicht ordentlich. Es funktioniert nämlich nur, wenn dieses || 0
beim Aufruf von getInputAsFloat stehen bleibt, das sollte es aber nicht. Ich beantworte mal einen Teil meiner Fragen von vorhin:
Frage 1: Welcher Wert entsteht aus document.formular_n.Wert4n, wenn es das Feld Wert4n nicht gibt?
Das Ergebnis ist undefined
Frage 2: Und welcher Wert entsteht dann aus document.formular_n.Wert4n || 0?
Da undefined
als falsy betrachtet wird (siehe auch meinen Abschnitt "Was ist Wahrheit" im Self-Wiki), gibt der ||
Operator seinen rechten Operanden zurück. Der Wert des Ausdrucks ist daher 0.
Frage 4: Ist das || 0 in Frage 2 eine gute Idee?
Nein. Der Ausdruck liefert dann entweder ein Objekt vom Typ HTMLInputElement oder die Zahl 0. Ausdrücke, die gemischte Typen zurückliefern, sind schlechter Stil, das sollte man meiden. Das || 0
wegzulassen ist besser. undefined
ist zwar auch ein anderer Typ (undefined
ist der einzige Wert des undefined
Typs), aber es ist immerhin der übliche Wert für „da existiert etwas nicht“. Und wenn man schon zwischen Typen unterscheiden muss, dann mit möglichst wenig Code.
Lass also diese || 0 Korrektur im Aufruf weg. Du bekommst bei fehlenden Feldern dann undefined
in die Funktion hinein. Und nun überlege Dir, wie Du damit umgehst, dass in element
dieser Wert drinsteht.
Eine Variable anzulegen ist jedenfalls nicht nötig. Welche sollte es sein? Und warum überhaupt? Welchen Wert erwartest Du von getInputAsFloat
denn sinnvollerweise zurück, wenn das input-Element nicht existiert?
Ich hätte aber zu dieser Codezeile noch allgemeine Anmerkungen:
- statt
typeof irgendwas == 'undefined'
kannst Du auch direkt mit der eingebauten Konstantenundefined
vergleichen. Dabei ist auf das Dreifachgleich zu achten, weil das Doppelgleich versucht, die verglichenen Werte aneinander anzupassen, wenn sie verschiedene Typen haben. Beispielsweise würden Abfragen wienull == undefined
oder0 == ""
behaupten, das sei gleich.
if (irgendwas === undefined) {
...
}
- wenn Du genau weißt, dass bei einer Abfrage entweder ein Objekt oder
undefined
odernull
vorkommt, dann kannst Du ausnutzen, dass ein Objekt immer truthy ist und die Werteundefined
undnull
falsy sind (hast Du „Was ist Wahrheit“ gelesen?).
Ein gültiges input-Element wird also als truthy betrachtet. Und damit kannst Du kompakt schreiben:
if (element) {
// Element ist da
}
// oder
if ( !element ) {
// Element ist nicht da
}
Solche Abfragen sind sprachtypisch für JavaScript, davor solltest Du keine Angst haben.
Rolf
sumpsi - posui - obstruxi