0

我正在阅读 MDN 网站上对 JavaScript 的重新介绍,并在数组部分看到了这个示例:

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

其中“a[]”是一个被循环的数组。

我对“项目”在第一次迭代中的价值感到困惑。由于 i=0 并且 item 最初是未定义的,因此当它被分配 a[i++] 的值时,迭代不会从 i=1 开始,这意味着迭代将从 a[ 中的第二个元素开始] 数组 -> a[1],完全跳过第一个元素 a[0]?

4

3 回答 3

4

i++i自增运算符,这意味着它递增1但计算为旧(非递增)值。

> i = 0
  0
> i++
  0
> i
  1
于 2013-05-13T16:18:14.967 回答
2

i++ 是后增量(参见其他答案)并且 item 不会未定义,因为谓词(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

这种语法的问题是,如果 in 的值a是假的,则循环将过早终止。

var a = [1,2,0,3,4];
for (var i = 0, item ; item = a[i++];) {
   console.log(item);
}

将输出“1 2”,因为“0”是假的并且循环终止

于 2013-05-13T16:25:05.147 回答
1

i++ 表示 javascript 读取 i 值然后递增它

于 2013-05-13T16:18:31.637 回答