Відповіді:
Спробуйте:
text: text ? text : "default text"
"undefined"
- це лише рядкове подання посилання, що не посилається ні на що, як-от None
або NULL
на інших мовах.
===
є суворим оператором порівняння, ви можете прочитати цю тему: /programming/523643/difference-between-and-in-javascript
if (text) { text } else {"default text"}
якщо бути точним. if (object)
оцінює значення false, якщо він object
не визначений. Схожий на хак у стилі C, якщо (покажчик), який оцінює значення false, якщо покажчик має значення 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
), використовуйте його як умову, якщо оператор або потрійний оператор. Якщо вам потрібно зберегти результат порівняння як булеве значення, використовуйте var textPresent = !!text
(хоча подвійне !
може здатися заплутаним для одного читання коду).