Câu trả lời:
Thử:
text: text ? text : "default text"
"undefined"
chỉ là một đại diện chuỗi của một tham chiếu không tham chiếu bất cứ điều gì, giống như None
, hoặc NULL
trong các ngôn ngữ khác.
===
là toán tử so sánh nghiêm ngặt, bạn có thể muốn đọc chủ đề này: /programming/523643/difference-b between-and-in-javascript
if (text) { text } else {"default text"}
chinh xac. if (object)
đánh giá thành sai nếu object
không xác định. Tương tự hack theo kiểu C nếu (con trỏ) ước lượng thành false nếu con trỏ có giá trị 0 (NULL). Cần lưu ý rằng text
biến được sử dụng cho thuộc tính văn bản của một nút được lấy từ phạm vi bên ngoài. Nó sẽ rõ ràng hơn nhiều với : text: inText ? inText : "default text"
, hoặcif(inText) { text } else {"default text"}
if (text is true) then {text = text} else {text = "default text"}
- điều này có chính xác không?
if (text is true)
. Tôi thấy dễ dàng hơn để nghĩ là if (text *is*)
hay if (text exists)
. Một nguồn tốt khác: 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"
}
Câu trả lời này đưa ra một cảnh báo cho tôi.
QML Button: Binding loop detected for property "text"
Thay đổi text
để modelText
thay vào đó ném một lỗi.
ReferenceError: modelText is not defined
Điều này dừng thực thi Javascript cho tôi; tức là dòng tiếp theo không được gọi.
Điều tương tự cũng xảy ra khi cài đặt nó qua Javascript, nhưng khá dài dòng.
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (modelText !== "undefined") {
myButton.text = modelText;
}
}
}
typeof
Các typeof
câm khai thác lỗi và các công trình như mong đợi.
import QtQuick 2.3
import QtQuick.Controls 1.2
Button {
id: myButton
text: "default text"
Component.onCompleted: {
if (typeof modelText !== "undefined") {
myButton.text = modelText;
}
}
}
Để so sánh với không xác định bạn viết text === undefined
. Điều này sẽ đánh giá thành sai nếu text
là null
.
Nếu bạn muốn kiểm tra xem giá trị có hiện diện hay không (nghĩa là kiểm tra cả hai undefined
và null
), sử dụng nó làm điều kiện trong câu lệnh if hoặc toán tử ternary. Nếu bạn cần lưu trữ kết quả so sánh dưới dạng giá trị boolean, hãy sử dụng var textPresent = !!text
(mặc dù gấp đôi !
có thể gây nhầm lẫn cho một người đọc mã).