Javascript 检查键是否有值

Javascript 检查键是否有值,javascript,jquery,arrays,object,key,Javascript,Jquery,Arrays,Object,Key,我正在尝试检查日历和t点键是否有与之关联的值 起初,我试图检查是否包含calendar和tpoint键,但后来我意识到它们始终都是键。我想检查日历和tpoint键是否有值的原因是,有时它们没有值 我的尝试在下面的packageContents对象下面 有人知道我如何检查键是否有值吗 var packageContents = { 'packages': [ { 'price': '32', '

我正在尝试检查
日历
t点
键是否有与之关联的值

起初,我试图检查是否包含
calendar
tpoint
键,但后来我意识到它们始终都是键。我想检查
日历
tpoint
键是否有值的原因是,有时它们没有值

我的尝试在下面的
packageContents
对象下面

有人知道我如何检查键是否有值吗

var packageContents = {
        'packages': [
            {
                'price': '32',
                'name': 'Gold Bundle Package',
                'calendar': {
                    'type': '2year',
                    'color': 'Brushed Nickel',
                },
                'tpoint': {
                    'type': 'Gold',
                    'touches': '21',
                    'years': '7',
                }
            },
            {
                'price': '23',
                'name': 'Bronze Bundle Package',
                'calendar': {
                    'type': '2year',
                    'color': 'Brushed Nickel',
                },
                'tpoint': {
                    'type': 'Bronze',
                    'touches': '9',
                    'years': '7',
                }
            }
        ]
    };

packageContents['packages'].forEach(function (bun) {
    if (bun['calendar'].length >= 1 && bun['tpoint'].length >= 1) {
        var bundleSet;
        console.log(bundleSet);
        console.log('Working');
    }
});
编辑:

您的
.forEach()
循环正在
packageContent.packages
数组中的对象上循环,因此最好使用变量名来提醒您

然后,由于您知道这些对象中键的静态名称,因此不需要使用括号符号(
[]
)将它们作为字符串传递给对象,只需在实例上使用点符号即可

最后,您只需要检查这些键中是否存储了值,因此检查存储在其中的数据类型是否为未定义的

var packageContents={
“包”:[
{
‘价格’:‘32’,
'name':'Gold Bundle Package',
“日历”:{
“类型”:“2年”,
“颜色”:“拉丝镍”,
},
“tpoint”:{
“类型”:“黄金”,
"接触":"21",,
‘年’:‘7’,
}
},
{
‘价格’:‘23’,
'name':'brown Bundle Package',
“日历”:{
“类型”:“2年”,
“颜色”:“拉丝镍”,
},
“tpoint”:{
“类型”:“,
“触摸”:“,
“年”:“,
}
}
]
};
var bundleSet=null;
packageContents.packages.forEach(函数(obj){
//我们现在正在主数组中的每个顶级对象上循环。
//要查看这些对象的quesiton中的每个属性是否都有值,
//我们需要对这些属性进行循环
用于(obj中的var prop){
//我们只对“日历”和“点”感兴趣
如果(道具==“日历”| |道具==“t点”){
//这些属性存储它们自己的对象,我们需要检查这些属性
对于(obj[prop]中的var子程序){
//因为您知道密钥名称,所以可以直接在实例上访问它们
//只需检查它们是否有未定义的值即可
如果(对象[属性][子属性]!=“”){
bundleSet=true;
}否则{
bundleSet=false;
}
}
}
}
console.log(bundleSet);

});谢谢!那么typeof只是返回未定义或已定义的吗?@Paul
typeof
将返回JavaScript类型(
“object”
“string”
“number”
“boolean”
“function”
,等等),或者当没有值时它将返回
“undefined”
。那么为什么它会显示未定义呢?所有键都有值?只是有些困惑。@Paul,因为在您的代码中,您声明了
var bundleSet
,但您从未将其初始化为任何内容,然后立即将其记录下来。这一部分与实际问题或解决方案无关,只是额外的代码,我以为你有什么目的。@Paul我完全误解了你的意思,我更新了我的答案以反映你的问题。在您的情况下,如果您希望属性有时可能包含空字符串(即,
“年”:“
),那么只需要对空字符串进行简单的测试。
var packageContents = {
        'packages': [
            {
                'price': '23',
                'name': 'Bronze Bundle Package',
                'calendar': {
                    'type': '2year',
                    'color': 'Brushed Nickel',
                },
                'tpoint': {
                    'type': '',
                    'touches': '',
                    'years': '',
                }
            }
        ]
    };




var bundleSet = '';

    packageContents['packages'].forEach(function (obj) {
        if (typeof obj.calendar !== 'undefined' && typeof obj.tpoint !== 'undefined') {
            bundleSet = "Bundle";

        }
        else {
            bundleSet = "not bundle"
        }
        console.log(bundleSet);
    });