Antworten:
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, wenn object
undefiniert ist. Ähnliches Hacking wie C-style if (Zeiger), das false ergibt, wenn der Zeiger den Wert 0 (NULL) hat. Es ist erwähnenswert, dass text
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, als if (text *is*)
oder zu denken if (text exists)
. Eine weitere gute Quelle: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: text ? text : "default text"
}
Diese Antwort warnt mich.
QML Button: Binding loop detected for property "text"
Das Ändern text
auf löst modelText
stattdessen einen Fehler aus.
ReferenceError: modelText is not defined
Dies stoppt die Ausführung von Javascript für mich; dh die nächste Zeile wird nicht aufgerufen.
Das gleiche passiert, wenn es über Javascript eingestellt wird, ist aber ziemlich ausführlich.
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (modelText !== "undefined") {
myButton.text = modelText;
}
}
}
typeof
Der typeof
Bediener schaltet den Fehler stumm und arbeitet wie erwartet.
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (typeof modelText !== "undefined") {
myButton.text = modelText;
}
}
}
Zum Vergleich mit undefined schreibst du text === undefined
. Dies wird zu false ausgewertet, wenn text
ist null
.
Wenn Sie überprüfen möchten, ob ein Wert vorhanden ist (dh, ob beide undefined
und vorhanden sind null
), 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 Sie var textPresent = !!text
(obwohl double !
möglicherweise verwirrend erscheint, wenn Sie den Code lesen).