Rolf B: Script trotzdem ausführen, auch wenn Variable nicht da ist, nicht existiert!

Beitrag lesen

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 Konstanten undefined 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 wie null == undefined oder 0 == "" behaupten, das sei gleich.
if (irgendwas === undefined) {
   ...
}
  • wenn Du genau weißt, dass bei einer Abfrage entweder ein Objekt oder undefined oder null vorkommt, dann kannst Du ausnutzen, dass ein Objekt immer truthy ist und die Werte undefined und null 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
0 77

JavaScript Ergebnis in INPUT Feld + Zahl mittels CSS formatieren

Franz
  • css
  • html
  • javascript
  1. 1
    JürgenB
    1. 0
      Franz
      1. 0
        JürgenB
      2. 0
        Franz
        1. 2
          JürgenB
    2. 1
      Gunnar Bittersmann
      • html
      • javascript
  2. 0

    INPUT Feld als Währung während der Eingabe formatieren

    Franz
    1. 0
      Rolf B
      1. 0

        Alle Zeichen entfernen ausser ZAHLEN

        Franz
        • javascript
        1. 0
          Franz
          1. 0
            Rolf B
            1. 0
              Der Martin
              1. 0
                Matthias Apsel
                1. 0
                  Tabellenkalk
                  1. 0
                    Matthias Apsel
                  2. 0
                    Der Martin
                    1. 0
                      Rolf B
              2. 0
                Gunnar Bittersmann
                1. 0
                  Rolf B
                  1. 0
                    Gunnar Bittersmann
                    1. 2
                      1unitedpower
                2. 0
                  Der Martin
                  1. 1
                    Rolf B
                  2. 0
                    Gunnar Bittersmann
                    1. 0
                      Der Martin
            2. 0

              Script trotzdem ausführen, auch wenn Variable nicht da ist, nicht existiert!

              Franz
              1. 0
                Gunnar Bittersmann
                1. 0
                  Franz
                  1. 0
                    Matthias Apsel
                    1. 0
                      Franz
                      1. 0
                        Matthias Apsel
                      2. 0
                        Tabellenkalk
              2. 3
                Rolf B
                1. 0
                  Franz (in den grossen Stiefel von Watson)
                  1. 0
                    Rolf B
                    1. 0
                      Franz
                      1. 0
                        Rolf B
                        1. 0
                          Franz
                          1. 2
                            Rolf B
                            1. 0
                              Franz
                              1. 0
                                Rolf B
                                1. 0

                                  funktionen in zwei Dateien geht nicht, in einer Datei gehen sie???

                                  Franz
                                  1. 1
                                    Rolf B
                              2. 0
                                Der Martin
                                1. 0
                                  Gunnar Bittersmann
                                  • css
                                2. 0
                                  Franz
                                  1. 0
                                    Der Martin
                                    1. 1
                                      Gunnar Bittersmann
                                      1. 0
                                        Franz
                                        1. 0
                                          Matthias Apsel
                                          1. 0
                                            Rolf B
                                        2. 1
                                          Rolf B
                                          1. 0
                                            Der Martin
                                          2. 0
                                            Gunnar Bittersmann
                                            1. 0
                                              JürgenB
                                        3. 1
                                          MudGuard
                                          1. 0
                                            JürgenB
                                            1. 0
                                              Rolf B
                                              1. 0
                                                JürgenB
                                                1. 0
                                                  Rolf B
                                                  1. 0
                                                    JürgenB
                                                2. 0
                                                  Der Martin
                                3. 3
                                  1unitedpower
                                  1. 0
                                    Gunnar Bittersmann
                                    1. 0
                                      Rolf B
                                      1. 0
                                        Gunnar Bittersmann
                                        • sonstiges
                                        1. 0
                                          Matthias Apsel
                                          1. 0
                                            Gunnar Bittersmann
                                            1. 0
                                              Matthias Apsel
                                              1. 0
                                                Der Martin
                                        2. 0
                                          Gunnar Bittersmann
                                4. 0
                                  Rolf B
                                  1. 0
                                    Der Martin
                                    1. 0
                                      Rolf B
  3. 1
    Gunnar Bittersmann
    • formatierung
    • formulare
    • javascript
    1. 1
      Gunnar Bittersmann