javascript中for循环和for in循环有什么不同
可能重复:javascript中for循环和for in循环有什么不同,javascript,for-loop,Javascript,For Loop,可能重复: 我在函数中使用for循环。我使用两种类型的循环,“用于in”和“用于”。两者都产生相同的结果,所以我想知道这些循环之间的区别,以及如何知道应该使用哪个循环。 变量jam=['amit'、'sam'、'ram'、'soly'] 用于(jam中的var i){ 警报(堵塞[i]) } //对于(i=0;i您可以使用您清楚理解的任何一种。对于数组,您可以同时使用这两种情况 对于可以使用的阵列 for (var i = 0; i < a.length; i++){ //do
我在函数中使用for循环。我使用两种类型的循环,“
用于in
”和“用于
”。两者都产生相同的结果,所以我想知道这些循环之间的区别,以及如何知道应该使用哪个循环。
变量jam=['amit'、'sam'、'ram'、'soly']
用于(jam中的var i){
警报(堵塞[i])
}
//对于(i=0;i您可以使用您清楚理解的任何一种。对于数组,您可以同时使用这两种情况
对于可以使用的阵列
for (var i = 0; i < a.length; i++){
//do something
}
for ( var i in obj){
//do something
}
因为您无法获得对象的长度。这取决于您需要什么。我通常使用for in循环,因为它是一种较短的形式,但有时您可能希望控制迭代变量。例如,如果您希望迭代偶数索引,则需要使用normal for循环:
for (var i = 0; i < myarray.length; i+=2) {...}
当然,对于对象,for in循环允许您在迭代变量中获取属性名称。例如:
var myobject = {year: 1992, city: "Barcelona"}
for (var propname in myobject) alert(propname + " = " + myobject[propname]);
在您的示例中,我会使用for In,因为您正在进行一个简单的迭代。此外,我认为在未优化的Javascript编译器/解释器中,for In循环会更快,因为变量增量是在内部完成的(即,它不是“I++”之类的Javascript语句).for
循环意味着在递增/递减时进行迭代
// 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
for数组的原因是,在糟糕的浏览器上,for…in…
不仅可以包含数字属性(即:key=0,key=1,
),还可以枚举您不希望它发生的事情……比如key=splice,key=length,key=unshift
。
如果您在专业站点上运行此代码,或者在特定硬件上运行JS的专用版本,或者在Unity或Unreal Editor的UnrealScript之类的程序中作为脚本语言运行,那么这并不是一件好事
您不在对象上使用迭代器
的原因是,您通常不会生成如下对象:
var obj = { "0" : "zero", "1" : "one", "2" : "two" };
即使您这样做了(例如jQuery做了类似的事情),也可能有一些基于单词的属性需要枚举,但您不能,因为您正在计数
同样重要的是要注意:使用枚举
的功能未标准化。
这意味着不能100%保证按照您期望的顺序输出值。
如果你依赖于你的循环0,1,2,3,…
那么for…in…
不能保证100%的浏览器都会这样做,100%的时间-即使大多数浏览器大部分时间都做对了
最常见的是,他们现在遵循先进先出的规则。
如果你像{1:1,2:2,3:3}
那样构建对象,任何现代浏览器都会打印1,2,3
。如果你像{2:2,1:1,6:6}
那样构建对象,你会得到2,1,6
但这是95%的时间“应该”,而不是100%的时间“将”。在该循环中找不到分配给for循环外部对象键值的某些变量,因此我建议在这种情况下使用for in循环。
// 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"
}
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"
}
var obj = { "0" : "zero", "1" : "one", "2" : "two" };