Wie prüft man, ob eine Eigenschaft in qml undefiniert ist?
Das versuche ich zu tun:
Button {
id: myButton
text: if (text === "undefined"){"default text"}
}
Wie prüft man, ob eine Eigenschaft in qml undefiniert ist?
Das versuche ich zu tun:
Button {
id: myButton
text: if (text === "undefined"){"default text"}
}
Versuchen:
text: text ? text : "default text"
"undefined"
ist nur eine Zeichenfolgendarstellung einer Referenz, die nichts genau wie None
oder NULL
in anderen Sprachen referenziert .
===
Wenn es sich um einen strengen Vergleichsoperator handelt, möchten Sie möglicherweise diesen Thread lesen: /programming/523643/difference-between-and-in-javascript
if (text) { text } else {"default text"}
um genau zu sein.if (object)
wird zu false ausgewertet, wennobject
undefiniert ist. Ähnliches Hacking wie C-style if (Zeiger), das false ergibt, wenn der Zeiger den Wert 0 (NULL) hat. Es ist erwähnenswert, dasstext
die für die Texteigenschaft einer Schaltfläche verwendete Variable außerhalb des Gültigkeitsbereichs liegt. Es wird viel klarer mit:text: inText ? inText : "default text"
oderif(inText) { text } else {"default text"}
if (text is true) then {text = text} else {text = "default text"}
- ist das korrekt?if (text is true)
. Ich finde es einfacher, alsif (text *is*)
oder zu denkenif (text exists)
. Eine weitere gute Quelle: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Diese Antwort warnt mich.
Das Ändern
text
auf löstmodelText
stattdessen einen Fehler aus.Dies stoppt die Ausführung von Javascript für mich; dh die nächste Zeile wird nicht aufgerufen.
Über Javascript
Das gleiche passiert, wenn es über Javascript eingestellt wird, ist aber ziemlich ausführlich.
Verwenden
typeof
Der
typeof
Bediener schaltet den Fehler stumm und arbeitet wie erwartet.quelle
Zum Vergleich mit undefined schreibst du
text === undefined
. Dies wird zu false ausgewertet, wenntext
istnull
.Wenn Sie überprüfen möchten, ob ein Wert vorhanden ist (dh, ob beide
undefined
und vorhanden sindnull
), verwenden Sie ihn als Bedingung in der if-Anweisung oder im ternären Operator. Wenn Sie das Ergebnis des Vergleichs als booleschen Wert speichern müssen, verwenden Sievar textPresent = !!text
(obwohl double!
möglicherweise verwirrend erscheint, wenn Sie den Code lesen).quelle