数组类型被选为数组值

时间:2012-08-24 13:51:35

标签: javascript arrays tridion tridion-2011

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

我可以轻松解决下面显示的问题(请参阅&& extensionGroup !== 'true'),但我想了解为什么isArray = true被计为在数组中 - 任何想法?

下面的屏幕截图显示已设置值extensionGroups

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

但是将isArray值作为第4个值返回?

已更新,以显示更清晰的图片

Firebug - objects

Firebug - code

2 个答案:

答案 0 :(得分: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) {
    // ...
});

答案 1 :(得分:1)

从技术上讲,

For..in不会迭代值。它遍历属性名称。在数组中,值ARE属性,在引擎盖下。所以,当你用for..in迭代它们时,你会得到像这样的时髦的东西。

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