JavaScript for...in vs for

472

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

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

var myArray = [{'key': 'value'}, {'key': 'value1'}];

所以我们可以进行迭代:

for (var i = 0; i < myArray.length; i++)

并且:

for (var i in myArray)

我没有看到很大的差别。有性能问题吗?


13
请注意,我们在JS 1.6中也有myArray.forEach(callback[, thisarg])方法。 - Benji XVI
14
@Benji array.forEach 实际上是 ES5 中的一个方法。 - mikemaccana
2
在 for-in 循环中,您需要一个条件语句,看起来像这样:if(myArray.hasOwnProperty(i)){true} - Eric Hodonsky
6
['foo', 'bar', 'baz'].forEach(function(element, index, array){ console.log(element, index, array); });除了 IE8 及以下版本外,这个语法基本上可以在任何地方使用,并且它是目前最优雅的语法。 - Jon z
5
ECMAScript 6中,还有一个名为for...of的语句,例如:for (let i of myArray) console.log(i);。它可以遍历一个可迭代对象(如数组),并使用变量i来迭代该对象中的每个元素。在循环体内部,您可以对每个元素执行任何操作。 - Vitalii Fedorenko
23个回答

0

小心! 我正在使用Mac OS中的Chrome 22.0,我在使用for each语法时遇到了问题。

我不知道这是浏览器问题、JavaScript问题还是代码中的某些错误,但这非常奇怪。在对象之外它完美地工作。

var MyTest = {
    a:string = "a",
    b:string = "b"
};

myfunction = function(dicts) {
    for (var dict in dicts) {
        alert(dict);
        alert(typeof dict); // print 'string' (incorrect)
    }

    for (var i = 0; i < dicts.length; i++) {
        alert(dicts[i]);
        alert(typeof dicts[i]); // print 'object' (correct, it must be {abc: "xyz"})
    }
};

MyObj = function() {
    this.aaa = function() {
        myfunction([MyTest]);
    };
};
new MyObj().aaa(); // This does not work

myfunction([MyTest]); // This works

0

使用 for in 来迭代一个对象。 它有更短的语法和易于使用。 这里的 in 词来自索引。将对象的属性视为索引并对其进行迭代。 如果您对数组使用 for in,则会获得数组中存在的元素的索引。


0

虽然它们非常相似,但有一个小差别:

var array = ["a", "b", "c"];
array["abc"] = 123;
console.log("Standard for loop:");
for (var index = 0; index < array.length; index++)
{
  console.log(" array[" + index + "] = " + array[index]); //Standard for loop
}

在这种情况下,输出为:

标准循环:

ARRAY[0] = A

ARRAY[1] = B

ARRAY[2] = C

console.log("For-in loop:");
for (var key in array)
{
  console.log(" array[" + key + "] = " + array[key]); //For-in loop output
}

在这种情况下,输出结果如下:

FOR-IN循环:

ARRAY[1] = B

ARRAY[2] = C

ARRAY[10] = D

ARRAY[ABC] = 123


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接