无法在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+=1var foo={12345:'bar'}在我的代码中的同一个位置,在那里我声明了
ratings
,并使用
console.log(foo[12345]);`它工作正常。我的
评级[12345]
完全可以使用。每个属性名在内部都是一个字符串,所以数字会自动强制为字符串(就像任何其他数据类型一样)。我从来没有使用过这个表单,因为它模棱两可而且容易出错。
ratings['12345'];
ratings[12345+""]; // this is the last resort, if possibile don't use it!