Respostas:
Experimentar:
text: text ? text : "default text"
"undefined"
é apenas uma representação em cadeia de uma referência não fazer referência a qualquer coisa, assim como None
, ou NULL
em outras línguas.
===
é um operador de comparação estrita, convém ler este tópico: /programming/523643/difference-between-and-in-javascript
if (text) { text } else {"default text"}
para ser exato. if (object)
avalia como false se não object
for definido. Corte semelhante ao estilo C se (ponteiro) que é avaliado como falso se o ponteiro tiver um valor 0 (NULL). Vale ressaltar que a text
variável usada para a propriedade de texto de um botão é retirada do escopo externo. Será muito mais claro com text: inText ? inText : "default text"
if(inText) { text } else {"default text"}
if (text is true) then {text = text} else {text = "default text"}
- isso é preciso?
if (text is true)
. Acho mais fácil pensar como if (text *is*)
ou if (text exists)
. Outra boa fonte: 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"
}
Esta resposta lança um aviso para mim.
QML Button: Binding loop detected for property "text"
Mudar text
para em modelText
vez disso gera um erro.
ReferenceError: modelText is not defined
Isso interrompe a execução do Javascript para mim; ou seja, a próxima linha não é chamada.
O mesmo acontece ao defini-lo via Javascript, mas é bastante detalhado.
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (modelText !== "undefined") {
myButton.text = modelText;
}
}
}
typeof
O typeof
operador silencia o erro e funciona conforme o esperado.
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (typeof modelText !== "undefined") {
myButton.text = modelText;
}
}
}
Para comparar com indefinido, você escreve text === undefined
. Isso será avaliado como falso se text
for null
.
Se você deseja verificar se o valor está presente (ou seja, verifique os dois undefined
e null
), use-o como condição na instrução if ou no operador ternário. Se você precisar armazenar o resultado da comparação como um valor booleano, use var textPresent = !!text
(embora o dobro !
possa parecer confuso para quem lê o código).