Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Abfrage ob eine Variable leer ist

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Abfrage ob eine Variable leer ist

    This topic has been deleted. Only users with topic management privileges can see it.
    • F
      Fitti last edited by

      Hi zusammen,

      ich kann ja in JS mittels if (!variable){ … abfangen, ob eine Skript-Variable gesetzt ist.

      Nur wie kann ich eine ioBroker Javaskript Variable abfangen/fragen, ob diese keinen Wert hat?

      Ein

      ****if (!"javascript.0.meineVariable"){

      log("Nix found " );

      }****

      fragt ja nur ab, ob es diese gibt - aber nicht ob diese einen Wert hat.

      Ein

      if (getState("javascript.0.meineVariable").val) != "undefined" ){…. oder

      if (!getState("javascript.0.meineVariable").val) ){… oder

      if (typeof(getState("tankerkoenig.0.stations." + i + ".name").val) != "undefined" ){…

      lassen immer alle das Skript abbrechen, mit dem Hinweis

      TypeError: Cannot read property 'val' of null

      Ich will genau diesen Zustand in meinen Skripten abfangen, damit diese nicht immer wegknallen, wenn eine Variable nicht gesetzt ist, die ich aber auslesen möchte.

      Mit try, catch bekomme ich es hin - gibt es aber eine schönere Methode?

      Danke wie immer im Voraus,

      Fitti

      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        Ab JS-Adapter-Version 2.3.1 wird es mit

        if (getState("javascript.0.meineVariable").val === null))
        

        funktionieren. Jetzt sollte es so funktionieren:

        if (!getState("javascript.0.meineVariable"))
        

        denn bei nicht vorhandenem State wird null geliefert.

        1 Reply Last reply Reply Quote 0
        • F
          Fitti last edited by

          @paul53:

          Ab JS-Adapter-Version 2.3.1 wird es mit

          if (getState("javascript.0.meineVariable").val === null))
          

          funktionieren. ` Klingt gut!
          @paul53:

          Jetzt sollte es so funktionieren:

          if (!getState("javascript.0.meineVariable"))
          

          denn bei nicht vorhandenem State wird null geliefert. `
          Leider nicht. Das Skript bricht dann ab.

          TypeError: Cannot read property 'val' of null

          Wenn es bald kommt, dann warte ich. Habe es ja mit try abgefangen. Sind nur unnötige Zeilen und liest sich schwerer.

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @Fitti:

            TypeError: Cannot read property 'val' of null `
            Auf ".val" wird doch gar nicht zugegriffen :!:

            1 Reply Last reply Reply Quote 0
            • F
              Fitti last edited by

              @paul53:

              Auf ".val" wird doch gar nicht zugegriffen :!: `

              Nicht das ich hier zu umständlich denke… , aber..

              Ich möchte wissen, ob eine existierende Variable im javascript.0 Bereich/Scope oder wie man das nennen möchte, einen Wert hat oder ob diese leer ist.

              Nach meinen Tests ist es so, wenn ich .val nicht anfüge, dann teste ich auf das Vorhandensein der Variablen. Weiß aber immer noch nicht, ob der Wert undefiniert ist.

              <u>Hintergrund:</u>

              In einem JS legen wir mit CreateState eine Var an, diese hat aber dann gerne mal keinen Wert.

              Dann kommt eine erste Routine per on. oder schedule z. B., die erst mal diese Variable auslesen möchte. Das ist bei sehr vielen Skripten hier im Forum so. Das ist natürlich nicht sauber, kann aber jederzeit ja mal vorkommen. Dann knallt das Skript weg, da .val ein undefined zurückgibt.

              Dieses gilt es abzufangen. Ich will also genau dieses undefined umgehen oder abfangen. Also am liebsten gar nicht die Abfrage durchführen, wenn nicht möglich. Macht man ja eigentlich auch so.

              Bei einer internen Variable/Array geht das ja sehr einfach mittels if (!meineVar) {…INfo nö} else{so, alles okay,mach mal}.

              Mit try catch geht das ja sehr gut, aber etwas nervig.

              Oder habe ich hier einen Logikfehler?

              1 Reply Last reply Reply Quote 0
              • paul53
                paul53 last edited by

                @Fitti:

                TypeError: Cannot read property 'val' of null `
                Diese Meldung zeigt, dass getState(id) null liefert, also zu dieser id keine Zustände (states) vorhanden sind. Es ist so die Prüfung möglich, ohne dass es zu der Fehlermeldung kommt:

                if (getState("javascript.0.meineVariable")) x = getState("javascript.0.meineVariable").val;
                

                Stattdessen wird ein Warning-Log erzeugt und die JS-Variable x wird nicht verändert (bleibt so wie sie deklariert wurde).

                1 Reply Last reply Reply Quote 0
                • First post
                  Last post

                Support us

                ioBroker
                Community Adapters
                Donate

                1.1k
                Online

                31.7k
                Users

                79.7k
                Topics

                1.3m
                Posts

                2
                6
                3392
                Loading More Posts
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes
                Reply
                • Reply as topic
                Log in to reply
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                The ioBroker Community 2014-2023
                logo