for
循环指的是iterate
,同时递增/递减。
// note that I'm making this big and ugly to show what's going on
var incrementor = 1, length = 10,
array = [ "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine", "ten" ];
for (; incrementor <= length; incrementor = incrementor + 1) {
console.log(incrementor); // 1,2,3,...,10
console.log(array[incrementor - 1]); // "one", "two", "three", ..., "ten"
}
for ... in ...
回路通过对象属性意味着enumerate
。
var object = { "key1" : "one", "key2" : "two", "key3" : "three" },
key = "";
for (key in object) {
console.log(key); // "key1", "key2", "key3"
console.log(object[key]); // "one", "two", "three"
}
您使用for
数组的原因是因为糟糕的浏览器,for ... in ...
不仅包括数量的属性(即:key=0, key=1,...
),但它也可以通过枚举的东西,你不希望它.. ... ...就像key=splice, key=length, key=unshift
。 如果您在专业网站上运行此代码,或者在特定硬件上运行JS的特定版本,或者在Unity或Unreal Editor的UnrealScript等程序中作为脚本语言运行,那么这不是一件好事。
的原因你没有使用对象上的iterator
是因为你通常不会做出这样的对象:
var obj = { "0" : "zero", "1" : "one", "2" : "two" };
而且即使你没有(jQuery不会这样的事情,例如),有可能是你想枚举的基于单词的属性,但你不能,因为你在计数。
同样重要的是要注意:enumerating
与for ... in ...
其功能没有标准化。 这意味着它不是100%保证按预期的顺序吐出数值。 如果你依靠你的循环去0,1,2,3,...
那么for ... in ...
不能保证100%的浏览器将会这样做,100%的时间 - 即使大多数浏览器在大多数时间都适用。
最经常的是,他们现在依靠先入先出的原则。 如果您构建的对象类似{ one : 1, two : 2, three : 3 }
,则任何现代浏览器都会打印1,2,3
。如果您构建的对象如下:{ two: 2, one: 1, six: 6 }
,您将获得2,1,6
。
但是,这是95%的时间“应该”,而不是100%的时间“将”。
在这个循环中找不到一个在for循环之外的对象键值的变量,因此我建议在这种情况下使用for-in-loop。 – 2018-02-02 15:17:33