NEWS
Abfrage ob eine Variable leer ist
-
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
-
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.
-
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.
-
TypeError: Cannot read property 'val' of null `
Auf ".val" wird doch gar nicht zugegriffen :!: -
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?
-
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).