这两个表达式for循环的语法是什么意思?

use*_*637 1 javascript

这两个表达var i = 0, item; item = a[i++];是什么意思?

for (var i = 0, item; item = a[i++];) {  
    // Do something with item  
}  
Run Code Online (Sandbox Code Playgroud)

显然这是一个替代品

for (var i = 0; i < a.length; i++) {  
    // Do something with a[i]  
}  
Run Code Online (Sandbox Code Playgroud)

Ada*_*kis 6

for (var i = 0, item; item = a[i++];) {  
    // Do something with item  
} 
Run Code Online (Sandbox Code Playgroud)

只要item被赋予"真实"的价值,就告诉循环继续前进.每次迭代后,item都会为数组中的下一个项目分配.这个想法是,一旦i达到超出数组范围的点,undefined将被分配,循环将终止.

但是编写这段代码的人应该被解雇,因为如果数组包含任何"falsy"值,循环也将终止:0,空字符串,false好,这段代码是由Mozilla人写的,而且它们比我更聪明.只是要注意,如果数组包含任何"falsy"值的循环将终止:0,empty string,false

亲眼看看:

var a = [1, 2, 3, 0, 5, 6];

for (var i = 0, item; item = a[i++]; ) {
    alert(item);
} 
Run Code Online (Sandbox Code Playgroud)

请注意,循环在3之后终止,因为0是假的.