【问题标题】:best way to use "for in"使用“for in”的最佳方式
【发布时间】:2015-01-29 21:39:59
【问题描述】:

在我添加 enyo.js 之后,之前运行的代码现在在 for 循环中失败。我怀疑当我使用for(var ls in list) 时,即使长度为0,它也会循环。当我调试时,我发现它正在考虑将“findIndex”作为列表中的值之一并进入循环。我有几个地方使用 for with in,我想找到一种过滤掉“findIndex”或任何无效索引的最佳方法,以便只有有效元素进入循环

for(var ls in list)
  {
    var lin = list[ls].rb ;

  }

【问题讨论】:

  • 不要那样做;使用常规 for 循环。
  • 也许您可以使用这样的循环:for(var i = 0; i < list.length; i++)
  • list 是一个对象数组吗?如果是数组,不要使用for...in。一个常规的for 循环就足够了。否则hasOwnProperty 应该会有所帮助。
  • 在使用 for-in 循环时始终使用 hasOwnProprerty() 过滤器。

标签: javascript enyo


【解决方案1】:

如果您的列表是一个数组,只需使用常规的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
}

【讨论】:

  • 如果 list 是一个对象,我们需要使用 hasOwnProperty 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多