你认为……有很大的不同吗?In和for循环?你更喜欢用哪种for ?为什么?
假设我们有一个关联数组数组:
var myArray = [{'key': 'value'}, {'key': 'value1'}];
所以我们可以迭代:
for (var i = 0; i < myArray.length; i++)
And:
for (var i in myArray)
我看不出有什么大的不同。是否存在性能问题?
你认为……有很大的不同吗?In和for循环?你更喜欢用哪种for ?为什么?
假设我们有一个关联数组数组:
var myArray = [{'key': 'value'}, {'key': 'value1'}];
所以我们可以迭代:
for (var i = 0; i < myArray.length; i++)
And:
for (var i in myArray)
我看不出有什么大的不同。是否存在性能问题?
当前回答
注意本机Array。每种方法现在都得到广泛支持。
其他回答
我认为你应该根据你的需要来选择迭代方法。我建议你不要用for in结构来循环原生数组。它的速度要慢得多,而且正如Chase Seibert刚才指出的那样,它与Prototype框架不兼容。
有一个关于不同循环风格的优秀基准测试,如果您使用JavaScript,绝对应该看看。不要做早期的优化,但你应该把这些东西放在你脑后的某个地方。
我将使用for in来获取对象的所有属性,这在调试脚本时特别有用。例如,当我探索不熟悉的物体时,我喜欢把这句话放在手边:
l = ''; for (m in obj) { l += m + ' => ' + obj[m] + '\n' } console.log(l);
它将整个对象的内容(连同方法体)转储到Firebug日志中。非常方便。
我曾见过使用对象、原型和数组的“for each”的问题
我的理解是for each是对象的属性,而不是数组
for(;;)用于数组:[20,55,33]
{x:20,y:55:z:33}
小心!
例如,如果你有几个脚本标签,你正在标签属性中搜索信息,你必须使用.length属性和for循环,因为它不是一个简单的数组,而是一个HTMLCollection对象。
https://developer.mozilla.org/en/DOM/HTMLCollection
如果你使用foreach语句for(var i in yourList),它将在大多数浏览器中返回HTMLCollection的属性和方法!
var scriptTags = document.getElementsByTagName("script");
for(var i = 0; i < scriptTags.length; i++)
alert(i); // Will print all your elements index (you can get src attribute value using scriptTags[i].attributes[0].value)
for(var i in scriptTags)
alert(i); // Will print "length", "item" and "namedItem" in addition to your elements!
即使getElementsByTagName应该返回一个节点列表,大多数浏览器都返回一个HTMLCollection: https://developer.mozilla.org/en/DOM/document.getElementsByTagName
选择应该基于哪个成语最容易理解。
使用以下方法迭代数组:
for (var i = 0; i < a.length; i++)
//do stuff with a[i]
被用作关联数组的对象使用以下方法迭代:
for (var key in o)
//do stuff with o[key]
除非你有惊天动地的理由,否则就坚持既定的使用模式。