让我们说我有这个对象,前两个人购买了房产(用户买了多少)
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
}
};
我希望循环遍历Drugs对象,以便找出其中哪些已经购买了属性。
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;
即使我买的钥匙有财产我也总是假的
答案 0 :(得分:1)
您不想测试Drugs
集合,您想测试单个药物对象。此外,hasOwnProperty
确实将属性名称作为字符串,而不是属性值。所以使用
if (dd.hasOwnProperty("bought"))
虽然在你的情况下,像
这样的简单测试if (dd.bought)
应该足够了,特别是当您想要处理不存在的属性(解析为undefined
)时,就像0
值一样。
答案 1 :(得分:0)
如果您想找到属性&#34;已购买&#34;,那么您需要在hasOwnProperty()
来电中检查该字词。所以改变这一行:
if (Drugs.hasOwnProperty(dd.bought)){
。 。 。对此。 。
if (dd.hasOwnProperty("bought")){
在您的两个测试项目中,您当前正在检查该项目是否具有名为&#34; 2&#34; &#34; 3&#34;分别在&#34; Drugs&#34;对象(因为这是dd.bought
在您检查时等于的对象。)
在分配dd
之前,您还应该在代码中使用此功能:
if (Drugs.hasOwnProperty(d)){