我正在阅读MDN网站上对JavaScript的重新介绍,并在数组部分遇到了这个例子:
for (var i = 0, item; item = a[i++];){
// Do something with item
}
其中“a []”是循环的数组。
我对“item”在第一次迭代中的值感到困惑。当i = 0并且item首先是未定义的,那么当它被赋值时,[i ++]的值不会从i = 1开始迭代,这意味着迭代将从a中的第二个元素开始[ ] array - > a [1],完全跳过第一个元素a [0]?
答案 0 :(得分:4)
i++
是 post 增量运算符,这意味着它会i
增加1
,但会计算为旧的(非增量)值。< / p>
> i = 0
0
> i++
0
> i
1
答案 1 :(得分:2)
i ++是后增量(参见其他答案),项目不会是未定义的,因为谓词(for循环中的第二部分)在每次迭代之前执行。
for (var i = 0, item ; item = a[i++];) {
将评估为:
var i = 0;
var item;
item = a[i]; // loop
i += 1
if (!item) // exit loop
// loop body
// start again at loop
这种语法的问题是,如果a
中的值是假的,则循环将过早终止。
var a = [1,2,0,3,4];
for (var i = 0, item ; item = a[i++];) {
console.log(item);
}
将输出“1 2”,因为“0”是假的并且循环终止
答案 2 :(得分:1)
i ++意味着javascript读取i值然后递增