Übrigens, mein Beispiel von Boolean oben müsste abgeändert werden um für alle Fälle zu gelten.
Egal, grundsätzlich erlaubt Javascript selbst beliebige Typen für die Variablen aber wenn man im ioBroker eine Type festlegt dann sollte der Wert auch als solche gespeichert werden (nicht nur im History wo es richtig gemacht wird).
Ein Beispiel: Booleans (ein/Aus-states) werden in der Visualisierung als solche behandelt aber eben meist mit Standardabfragen wie
if(xxx) oder if(!xxx) behandelt.
if('false') erzeugt dabei true!
if('true oder sonst was') auch
if('') erzeugt hingegen false.
Bei Zahlen ist's einfacher, 0 erzeugt false, alles andere true.
Umgekehrt ist es schon schwieriger, verschiedene Adapter müssen unterschiedliche Strategien anwenden. Ich habe z.B. ein Gerät bei dem true 100 ist (für 100%) und false 0.
Da das Gerät auch Dimmer bedienen kann sind bei diesen 0-100 möglich, bei Schaltern aber nur 0 oder 100. Deshalb muss ich bei Dimmern einen Zahlen-Datentyp mit min/0 ,max/100 und bei Schaltern einen binären Wert vorsehen. Wandelt man nun 'true' auf eine Zahl (z.B. mit 0+'true') ergibt das 1. Mit 1 würde der Dimmer aber nicht eingeschaltet werden.
Wird dieser Wert nun in den State als Zahl geschrieben kann er zwar richtig in einen boolean umgewandelt werden, aber wenn wer 'true' hineinschreibt kennt sich das Gerät nicht aus obwohl das script glaubt es ist true.
Deshalb ist es wichtig wenigstens zu wissen wie sich ioBroker selbst verhält und Adaptern oder scripts vorzugeben wie sie sich zu verhalten haben.
Deswegen sollten auch Default klar definiert sein, wie "" oder "false"== false und "was auch immer" == true genauso wie 0 == false und nicht 0 == true