Javascript for..in和for循环之间的差异,以及计数器声明

Javascript for..in和for循环之间的差异,以及计数器声明,javascript,performance,loops,for-loop,Javascript,Performance,Loops,For Loop,循环的实现之间的差异(速度、性能、副作用等): 中间 var i; for(i = 0; i < length; i++){ //Do something} // more code 及 及 没有区别 JavaScript变量只有函数作用域,尽管您可以在for循环的初始化部分放置var语句,但实际上,声明位于作用域的顶部,这样,当第二个实例运行时,它们的处理方式与第一个实例完全相同 编辑:由于您在我回答问题后更新了该问题,因此您添加的第三个语法不使用var关键字,这意味着变量I(或e)将

循环的
实现之间的差异(速度、性能、副作用等):

中间

var i;
for(i = 0; i < length; i++){ //Do something}
// more code


没有区别

JavaScript变量只有函数作用域,尽管您可以在
for
循环的初始化部分放置
var
语句,但实际上,声明位于作用域的顶部,这样,当第二个实例运行时,它们的处理方式与第一个实例完全相同

编辑:由于您在我回答问题后更新了该问题,因此您添加的第三个语法不使用
var
关键字,这意味着变量
I
(或
e
)将被创建为全局变量,除非它已经作为全局变量存在,在这种情况下,现有变量将被覆盖。全局变量访问比局部变量访问慢


注意:我对这个问题的解释是,它不是比较for循环的标准与for..in变量,它只是比较for循环的不同变量声明方法,然后对for..in循环再次执行相同的操作。

没有区别

JavaScript变量只有函数作用域,尽管您可以在
for
循环的初始化部分放置
var
语句,但实际上,声明位于作用域的顶部,这样,当第二个实例运行时,它们的处理方式与第一个实例完全相同

编辑:由于您在我回答问题后更新了该问题,因此您添加的第三个语法不使用
var
关键字,这意味着变量
I
(或
e
)将被创建为全局变量,除非它已经作为全局变量存在,在这种情况下,现有变量将被覆盖。全局变量访问比局部变量访问慢


注意:我对这个问题的解释是,它不是比较for循环的标准和for。在变体中,它只是比较for循环的标准的不同变量声明方法,然后对for..in循环再次执行同样的操作。

计数器变量的去极化没有区别

但始终使用
var

否则它们会污染javascript已经肮脏的全局范围

与传统的
相比


(这是我对重复问题的回答…)

与反变量的去极化无关

但始终使用
var

否则它们会污染javascript已经肮脏的全局范围

与传统的相比


(这是我对重复问题的回答…

是的,javascript中for循环和for/in循环之间存在差异。这里是不同之处

考虑这个数组

var myArr = ["a", "b", "c"];
稍后,我将向该数组添加一个元素,但方式不同,如下所示:

myArr[myArr.length + 1] = "d";
此时,如果您使用console.log,那么这就是阵列的外观

["c", "b", "a", undefined × 1, "d"]
现在,让我们使用for和for/in循环遍历数组,看看区别是什么: 首先,让我们试试for循环

for(var i = 0; i != myArr.length; i++) {     // note, i used " != " instead of " < ". Yes this is faster.
  console.log(myArr[i]);
}
// output will look like this:
// "a" 
// "b" 
// "c"
// undefined × 1
// "d" 
// - This still shows the undefined value in the array.
差异1:当使用for/in循环时,javascript解释器将跳过所有空值或未定义的值。此外,for/in循环将在遇到原语值时将所有值转换为其等效的包装器对象。其中for循环不这样做


差异2:当使用for循环时,我们在循环中声明了变量i,如果for循环写入该函数,则该变量的作用域将在该函数中。这意味着,在函数结束之前,变量i仍然可用,即使在for循环之外,但在该函数内。其中,对于for/in循环,“key”变量的作用域在for/in循环停止执行后立即消失,这意味着内存利用率降低。

是的,javascript中for循环和for/in循环之间存在差异。这里是不同之处

考虑这个数组

var myArr = ["a", "b", "c"];
稍后,我将向该数组添加一个元素,但方式不同,如下所示:

myArr[myArr.length + 1] = "d";
此时,如果您使用console.log,那么这就是阵列的外观

["c", "b", "a", undefined × 1, "d"]
现在,让我们使用for和for/in循环遍历数组,看看区别是什么: 首先,让我们试试for循环

for(var i = 0; i != myArr.length; i++) {     // note, i used " != " instead of " < ". Yes this is faster.
  console.log(myArr[i]);
}
// output will look like this:
// "a" 
// "b" 
// "c"
// undefined × 1
// "d" 
// - This still shows the undefined value in the array.
差异1:当使用for/in循环时,javascript解释器将跳过所有空值或未定义的值。此外,for/in循环将在遇到原语值时将所有值转换为其等效的包装器对象。其中for循环不这样做


差异2:当使用for循环时,我们在循环中声明了变量i,如果for循环写入该函数,则该变量的作用域将在该函数中。这意味着,在函数结束之前,变量i仍然可用,即使在for循环之外,但在该函数内。其中,在for/in循环中,“key”变量的作用域在for/in循环停止执行后立即消失,这意味着内存利用率降低。

这一问题已经被问了一百万次……我怀疑它们的性能不同,但我可能错了。是否可以在循环中修改数组?你真的访问了前两个示例中的数组元素吗(甚至有数组吗)?@mu:没有。另一个问题是关于Java的。可能重复的问题已经被问了一百万次了……我怀疑它们在性能上是不同的,但我可能错了。可以在循环中修改数组吗?您实际访问了第一个数组中的数组元素吗
for(var i = 0; i != myArr.length; i++) {     // note, i used " != " instead of " < ". Yes this is faster.
  console.log(myArr[i]);
}
// output will look like this:
// "a" 
// "b" 
// "c"
// undefined × 1
// "d" 
// - This still shows the undefined value in the array.
for(key in myArr) {
  console.log(myArr[key]);
}
// array will look like:
// "a"
// "b"
// "c"
// "d"
// This will skip the undefined value.