对象数组长度在JavaScript中返回未定义

对象数组长度在JavaScript中返回未定义,javascript,arrays,Javascript,Arrays,我在控制台中有一个如下所示的数组 console.log(roles); User {0: "AdminUser", 1: "AuthenticatedUser"} 虽然它是一个数组,但我无法获取数组长度 console.log(roles.length); undefined 但是如果使用索引访问数组,我可以得到如下所示的值 console.log(roles[0]); AdminUser 它不是一个数组,显然是一个对象 可以使用类似数组的表示法访问它的原因是JS支持方括号访问表示

我在控制台中有一个如下所示的数组

console.log(roles);

User {0: "AdminUser", 1: "AuthenticatedUser"}
虽然它是一个数组,但我无法获取数组长度

console.log(roles.length);

undefined
但是如果使用索引访问数组,我可以得到如下所示的值

console.log(roles[0]);

AdminUser

它不是一个数组,显然是一个对象

可以使用类似数组的表示法访问它的原因是JS支持方括号访问表示法。
由于您使用数字作为键,这可能有点误导。

多亏了Pietro,我在了解Object.keys()后通过Google找到了解决方案


对于那些投了反对票的人来说,这是我今天学到的关于Object.keys()的新东西。感谢您的支持,投了反对票。:)

这不是一个数组,它是一个简单的对象。您是如何创建它的?如果它不是数组,那么console.log(角色[0])是如何创建的;console.log(角色[1]);显示对象的值。如果要将其声明为数组,请使用
var foo=['AdminUser','AuthenticatedUser]@pietro909:数组是从mBaas服务返回的。如果不是数组,则说明如何使用console.log(角色[0]);和console.log(角色[1]);有效?因为对象也可以通过该语法访问,所以如果长度不可用,如何通过循环访问它们?你能给你的答案加上代码吗?使用keys Objecy.keys()并迭代索引正如@Clive所说,你只是用方括号符号访问对象。碰巧您的索引是数字,所以您认为它可能是一个数组。
Object.keys(roles).forEach(function(key) {
    console.log(key + ': ' + roles[key]);
});