你认为for...in和for循环有很大的区别吗?你更喜欢使用哪种“for”?为什么?
假设我们有一个关联数组的数组:
var myArray = [{'key': 'value'}, {'key': 'value1'}];
所以我们可以进行迭代:
for (var i = 0; i < myArray.length; i++)
并且:
for (var i in myArray)
我没有看到很大的差别。有性能问题吗?
你认为for...in和for循环有很大的区别吗?你更喜欢使用哪种“for”?为什么?
假设我们有一个关联数组的数组:
var myArray = [{'key': 'value'}, {'key': 'value1'}];
所以我们可以进行迭代:
for (var i = 0; i < myArray.length; i++)
并且:
for (var i in myArray)
我没有看到很大的差别。有性能问题吗?
小心! 我正在使用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
使用 for in 来迭代一个对象。 它有更短的语法和易于使用。 这里的 in 词来自索引。将对象的属性视为索引并对其进行迭代。 如果您对数组使用 for in,则会获得数组中存在的元素的索引。
虽然它们非常相似,但有一个小差别:
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
myArray.forEach(callback[, thisarg])
方法。 - Benji XVIif(myArray.hasOwnProperty(i)){true}
- Eric Hodonsky['foo', 'bar', 'baz'].forEach(function(element, index, array){ console.log(element, index, array); });
除了 IE8 及以下版本外,这个语法基本上可以在任何地方使用,并且它是目前最优雅的语法。 - Jon zfor...of
的语句,例如:for (let i of myArray) console.log(i);
。它可以遍历一个可迭代对象(如数组),并使用变量i
来迭代该对象中的每个元素。在循环体内部,您可以对每个元素执行任何操作。 - Vitalii Fedorenko