Ответы:
Пытаться:
text: text ? text : "default text"
"undefined"
это просто строковое представление ссылки, не ссылающейся ни на что, как None
и NULL
на других языках.
===
является оператором строгого сравнения, вы можете прочитать эту тему: /programming/523643/difference-between-and-in-javascript
if (text) { text } else {"default text"}
если быть точным. if (object)
оценивается как ложное, если object
не определено. Подобный хак в C-стиле if (указатель), который оценивается как ложный, если указатель имеет значение 0 (NULL). Стоит отметить, что text
переменная, используемая для свойства текста кнопки, берется из области видимости. Это будет намного яснее с:, text: inText ? inText : "default text"
илиif(inText) { text } else {"default text"}
if (text is true) then {text = text} else {text = "default text"}
- это точно?
if (text is true)
. Мне легче думать как if (text *is*)
или if (text exists)
. Еще один хороший источник: 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"
}
Этот ответ бросает мне предупреждение.
QML Button: Binding loop detected for property "text"
Изменение text
к modelText
вместо выдает ошибку.
ReferenceError: modelText is not defined
Это останавливает выполнение Javascript для меня; то есть следующая строка не называется.
То же самое происходит при настройке через Javascript, но довольно многословно.
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (modelText !== "undefined") {
myButton.text = modelText;
}
}
}
typeof
В typeof
операторские немые ошибки и работает , как ожидалось.
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (typeof modelText !== "undefined") {
myButton.text = modelText;
}
}
}
Для сравнения с неопределенным ты пишешь text === undefined
. Это будет оцениваться как ложное, если text
есть null
.
Если вы хотите проверить наличие значения (т. Е. Проверить оба undefined
и null
), используйте его как условие в операторе if или в троичном операторе. Если вам нужно сохранить результат сравнения как логическое значение, используйте var textPresent = !!text
(хотя double !
может показаться запутанным при чтении кода).