我有一些简单的Javascript循环遍历项目数组(Tridion用户组),以检查用户是否是特定组的成员。
我可以轻松解决下面显示的问题(请参阅&& extensionGroup !== 'true'
),但我想了解为什么isArray
= true
被计为值在数组中 - 任何想法?
下面的屏幕截图显示已设置值extensionGroups
var extensionGroups = ["NotEvenARealGroup", "Author", "ExampleGroupAfterOneUserIsActuallyIn"];
但是将isArray
值作为第4个值返回?
已更新,以显示更清晰的图片
答案 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
,那么在你做之前要仔细考虑是否合理。