最佳使用方式 "for in"
best way to use "for in"
在我添加 enyo.js 之后,之前有效的代码现在在 for 循环中失败了。我怀疑当我使用 for(var ls in list)
时,即使长度为 0,它也会循环。当我调试时,我发现它正在将 "findIndex" 视为列表中的值之一并进入循环。我有几个地方使用 for with in,我想找出一个最好的方法来过滤掉 "findIndex" 或任何无效的索引,以便只有有效的元素进入循环
for(var ls in list)
{
var lin = list[ls].rb ;
}
如果 list 是一个数组,只需使用常规 for
循环即可。正是出于这个原因,并且不能保证顺序,将 for...in 与数组一起使用通常不是一个好主意。
如果必须使用 for...in
使用 hasOwnProperty 检查:
for (var ls in list)
{
if (list.hasOwnProperty(ls)) {
var lin = list[ls].rb;
// ...
}
}
当然,如果您只关心是否有 rb
属性,您 可以 测试一下:
if (list[ls].rb) {
var lin = list[ls].rb;
}
甚至:
var lin = list[ls].rb;
if (lin) {
// do whatever you needed to do with lin
}
在我添加 enyo.js 之后,之前有效的代码现在在 for 循环中失败了。我怀疑当我使用 for(var ls in list)
时,即使长度为 0,它也会循环。当我调试时,我发现它正在将 "findIndex" 视为列表中的值之一并进入循环。我有几个地方使用 for with in,我想找出一个最好的方法来过滤掉 "findIndex" 或任何无效的索引,以便只有有效的元素进入循环
for(var ls in list)
{
var lin = list[ls].rb ;
}
如果 list 是一个数组,只需使用常规 for
循环即可。正是出于这个原因,并且不能保证顺序,将 for...in 与数组一起使用通常不是一个好主意。
如果必须使用 for...in
使用 hasOwnProperty 检查:
for (var ls in list)
{
if (list.hasOwnProperty(ls)) {
var lin = list[ls].rb;
// ...
}
}
当然,如果您只关心是否有 rb
属性,您 可以 测试一下:
if (list[ls].rb) {
var lin = list[ls].rb;
}
甚至:
var lin = list[ls].rb;
if (lin) {
// do whatever you needed to do with lin
}