无法在JavaScript中获取对象的属性
我有以下代码:无法在JavaScript中获取对象的属性,javascript,Javascript,我有以下代码: var userId = r.response[0].uid; if (typeof ratings[userId] !== 'undefined'){ ratings[userId].likes = ratings[userId].likes++; ratings[userId].name = r.response[0].first_name +" "+ r.response[0].last_name; } els
var userId = r.response[0].uid;
if (typeof ratings[userId] !== 'undefined'){
ratings[userId].likes = ratings[userId].likes++;
ratings[userId].name = r.response[0].first_name +" "+ r.response[0].last_name;
} else {
ratings[userId] = new Object;
ratings[userId].likes = 1;
ratings[userId].name = r.response[0].first_name +" "+ r.response[0].last_name;
}
所以我有一件奇怪的事。当我使用console.log(ratings)查看对象中的内容时,它会显示该对象的所有属性。但当我试图得到这样的财产时:
console.log(ratings[12345]) or console.log(ratings["12345"])
它是未定义的。但是console.log(ratings)
告诉我我有12345财产(它也是一个对象)。
我的代码中有什么错误,如何修复它?如果您使用数字作为用户的ID,那么您必须使用
var userId = '12345';
ratings[userId];
或
或
请记住,纯数字不允许作为JavaScript变量/keys identificator,但是如果它们被强制为字符串,那么您可以将它们用作键入对象。如果它是一个对象,您确定不应该像
评级[“12345”]
那样引用它吗?猜猜看,这不是我的强项。它应该很好用:。请使用您拥有的确切数据(至少是属性名称)创建一个演示。您确定属性名称(或任何其他隐藏字符)中的数字前后没有空格吗?不,分级['12345']具有相同的效果-它是未定义的。好吧,您向分级添加用户ID
的方式没有问题。似乎与您在r.response[0]
中的值有关。另外,ratings[userId].likes=ratings[userId].likes++
应仅为ratings[userId].likes++代码>或评分[userId].likes+=1是的,如果我把var foo={12345:'bar'}代码>在我的代码中的同一个位置,在那里我声明了
ratings,并使用
console.log(foo[12345]);`它工作正常。我的评级[12345]
完全可以使用。每个属性名在内部都是一个字符串,所以数字会自动强制为字符串(就像任何其他数据类型一样)。我从来没有使用过这个表单,因为它模棱两可而且容易出错。
ratings['12345'];
ratings[12345+""]; // this is the last resort, if possibile don't use it!