首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript for...in与

JavaScript for...in与
EN

Stack Overflow用户
提问于 2008-10-28 10:42:10
回答 22查看 291.8K关注 0票数 467

你认为for...in和for循环有很大的区别吗?你更喜欢使用哪种"for“?为什么?

假设我们有一个关联数组的数组:

代码语言:javascript
运行
复制
var myArray = [{'key': 'value'}, {'key': 'value1'}];

所以我们可以迭代:

代码语言:javascript
运行
复制
for (var i = 0; i < myArray.length; i++)

和:

代码语言:javascript
运行
复制
for (var i in myArray)

我看不出有什么大的不同。是否存在任何性能问题?

EN

回答 22

Stack Overflow用户

回答已采纳

发布于 2008-10-28 11:01:17

选择应该基于哪个习惯用法是最容易理解的。

使用以下命令迭代数组:

代码语言:javascript
运行
复制
for (var i = 0; i < a.length; i++)
   //do stuff with a[i]

使用以下命令迭代用作关联数组的对象:

代码语言:javascript
运行
复制
for (var key in o)
  //do stuff with o[key]

除非你有惊天动地的理由,否则请坚持既定的使用模式。

票数 550
EN

Stack Overflow用户

发布于 2008-10-28 15:39:08

Douglas Crockford在JavaScript: The Good Parts (第24页)中建议避免使用for in语句。

如果使用for in遍历对象中的属性名称,则结果是无序的。更糟糕的是:您可能会得到意想不到的结果;它包括从原型链继承的成员和方法的名称。

除了属性之外的所有内容都可以用.hasOwnProperty过滤掉。此代码示例实现了您最初可能想要的功能:

代码语言:javascript
运行
复制
for (var name in obj) {
    if (Object.prototype.hasOwnProperty.call(obj, name)) {
        // DO STUFF
    }
}
票数 163
EN

Stack Overflow用户

发布于 2009-08-04 17:57:22

仅供参考- jQuery用户

默认情况下,jQuery的each(callback)方法使用for( ; ; )循环,只有当长度为undefined时才使用for( in )

因此,我想说在使用这个函数时,假定顺序是正确的是安全的。

示例

代码语言:javascript
运行
复制
$(['a','b','c']).each(function() {
    alert(this);
});
//Outputs "a" then "b" then "c"

使用它的缺点是,如果你在做一些非UI逻辑,你的函数在其他框架上的可移植性将会降低。最好将each()函数与jQuery选择器一起使用,否则建议使用for( ; ; )函数。

票数 62
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/242841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档