4

我有一些简单的 Javascript 循环遍历一组项目(Tridion 用户组)来检查用户是否是特定组的成员。

我可以轻松地围绕下面显示的问题进行编码(请参阅&& extensionGroup !== 'true'),但我想了解为什么isArray=true被视为数组中的一个- 有什么想法吗?

下面的屏幕截图表明该值extensionGroups已被设置

var extensionGroups = ["NotEvenARealGroup", "Author", "ExampleGroupAfterOneUserIsActuallyIn"]; 

但将isArray值作为第四个值返回?

更新以显示更清晰的图像

Firebug - 对象

萤火虫 - 代码

4

2 回答 2

7

您正在使用for in迭代数组;不要那样做。使用for(或forEach):

for(var i = 0; i < extensionGroups.length; i++) {
    var extensionGroup = extensionGroups[i];
    // ...
}

失败的原因for in是用于在 JavaScript 中迭代对象的属性。以这种方式迭代数组意味着您会获得分配给它的任何其他内容,例如此属性或length.

如果你能够使用Array#forEach,这里可能最合适:

extensionGroups.forEach(function(extensionGroup) {
    // ...
});
于 2012-08-24T13:55:32.033 回答
1

For..in,从技术上讲,不会遍历值。它遍历属性名称。在数组中,值是属性,在引擎盖下。因此,当您对它们进行迭代时,for..in您会得到类似的时髦东西。

这突出了我的下一点:不要使用for..in. 不要将它用于数组 - 真的不要将它用于任何事情。好的——也许这有点过分了。这个怎么样:如果你觉得有必要使用for..in,在你做之前仔细想想它是否合理。

于 2012-08-24T14:02:21.243 回答