Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查JSON对象参数是否存在?_Javascript_Qt_Qml - Fatal编程技术网

Javascript 如何检查JSON对象参数是否存在?

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 没有一个是成功的;请参阅下面的代

我有一个对象的ListModel,它可能有也可能没有
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