Javascript 如何检查JSON对象参数是否存在?
我有一个对象的ListModel,它可能有也可能没有Javascript 如何检查JSON对象参数是否存在?,javascript,qt,qml,Javascript,Qt,Qml,我有一个对象的ListModel,它可能有也可能没有myvis参数(用于可见性)。如果myvis===true,则ListView委托应该可见。如果未定义myvis,我想假设myvis===true 为了检查myvis是否定义和/或存在,我尝试了3种方法: return(typeof myvis)==“未定义”?正确:myvis 返回myvis===null?正确:myvis return hasOwnProperty(“myvis”)?myvis:true 没有一个是成功的;请参阅下面的代
myvis
参数(用于可见性)。如果myvis===true
,则ListView委托应该可见。如果未定义myvis
,我想假设myvis===true
为了检查myvis是否定义和/或存在,我尝试了3种方法:
return(typeof myvis)==“未定义”?正确:myvis
返回myvis===null?正确:myvis
return hasOwnProperty(“myvis”)?myvis:true
import QtQuick 2.9
import QtQuick.Window 2.2
Window {
visible: true
width: 640
height: 480
ListModel {
id: myjson
ListElement {
displayName: "Planes"
myvis: false
}
ListElement {
displayName: "Trains"
myvis: true
}
ListElement {
displayName: "Automobiles"
}
}
ListView {
model: myjson
anchors.fill: parent
delegate: Text {
text: displayName
visible: {
console.log("typeof " + displayName + ":myvis is " + (typeof myvis))
console.log("hasOwnProperty " + hasOwnProperty("myvis"))
console.log(displayName + " is " + myvis)
//if myvis is not defined, assume it to be TRUE
return (hasOwnProperty("myvis") ? myvis : true)
}
}
}
}
我得到的输出:
qml: typeof Planes:myvis is boolean
qml: hasOwnProperty false
qml: Planes is false
qml: typeof Trains:myvis is boolean
qml: hasOwnProperty false
qml: Trains is true
qml: typeof Automobiles:myvis is boolean
qml: hasOwnProperty false
qml: Automobiles is false
我期望的输出:
qml: typeof Planes:myvis is boolean
qml: hasOwnProperty true
qml: Planes is false
qml: typeof Trains:myvis is boolean
qml: hasOwnProperty true
qml: Trains is true
qml: typeof Automobiles:myvis is undefined
qml: hasOwnProperty false
qml: Automobiles is undefined
编辑
如果模型是JSON对象且不是QML,那么它可以工作:
property var myjson: [
{
displayName: "planes",
myvis: false
},
{
displayName: "trains",
myvis: true
},
{
displayName: "automobiles"
}
]
ListView {
model: myjson
anchors.fill: parent
delegate: Text {
text: modelData.displayName
visible: {
console.log("typeof " + modelData.displayName + ":myvis is " + (typeof modelData.myvis))
console.log("hasOwnProperty " + modelData.hasOwnProperty("myvis"))
console.log(modelData.displayName + " is " + modelData.myvis)
//if myvis is not defined, assume it to be TRUE
return (modelData.hasOwnProperty("myvis") ? modelData.myvis : true)
}
}
}
输出与预期完全一致。有没有办法在保留ListModel和ListElements的同时获得此输出?如果只设置
myvis!==false
我想这就是您要找的。如果不等于false,你只需要展示你的东西。在我上面给出的MRE中,这肯定会起作用-如果在实践中这么简单的话!在我的实际使用中,给定一个未定义的myvis
。我将遍历子对象,如果它们都是myvis===false
那么myvis
应该返回false,否则如果任何子对象都是myvis==true