假设我有这个对象,前两个对象有购买的属性(用户购买了多少)
var Drugs = {
Extasy : {
name : "Extasy",
value: 0,
bought : 2,
hist : [],
qty : 0
},
Hash : {
name : "Hash",
value: 0,
hist : [],
bought: 3,
qty : 0
},
Adrenaline : {
name : "Adrenaline",
value: 0,
hist : [],
qty : 0
},
Cocaine : {
name : "Cocaine",
value: 0,
hist : [],
qty : 0
},
Mdma : {
name : "Mdma",
value: 0,
hist : [],
qty : 0
}
};我想要遍历毒品对象,以找出他们中的哪一个拥有购买的财产。
var outputs = '<li class="ui-li-has-count">';
for (var d in Drugs) {
var dd = Drugs[d];
if (Drugs.hasOwnProperty(dd.bought)) {
// if (dd.bought != 'undefined' ){
outputs+='<a class="ui-btn ui-btn-icon-right ui-icon-carat-r" href="#myPopup" onclick="buyPopup(this.id)" id='+dd.name+' >'+dd.name+'<span class="ui-li-count">'+dd.bought+'</span> ';
}
else {
outputs = false;
}
outputs += '</li></div>';
}
//getElementById
ast("panel1").innerHTML += outputs;即使我购买的密钥有一个属性,我也总是得到false
发布于 2015-01-30 05:15:47
您不希望测试Drugs集合,而是希望测试单个药物对象。此外,hasOwnProperty确实将属性名称作为字符串,而不是属性值。所以请使用
if (dd.hasOwnProperty("bought"))尽管在您的例子中,像这样的简单测试
if (dd.bought)应该足够了,特别是当您想要像对待0值一样对待不存在的属性(解析为undefined)时。
发布于 2015-01-30 05:12:56
如果您想要查找“已购买”的属性,那么您需要在hasOwnProperty()调用中检查该单词。因此,更改这一行:
if (Drugs.hasOwnProperty(dd.bought)){。。。对这个。。。
if (dd.hasOwnProperty("bought")){在您的两个测试项目中,您当前都在检查项目是否在"Drugs“对象上分别具有名为"2”和"3“的属性(因为这就是您检查时dd.bought等于的值)。
在赋值dd之前,您的代码中也应该包含这一点:
if (Drugs.hasOwnProperty(d)){https://stackoverflow.com/questions/28224624
复制相似问题