Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript数组迭代-MDN示例_Javascript_Arrays_For Loop_Increment - Fatal编程技术网

JavaScript数组迭代-MDN示例

JavaScript数组迭代-MDN示例,javascript,arrays,for-loop,increment,Javascript,Arrays,For Loop,Increment,我在MDN网站上阅读JavaScript的重新介绍,在Array部分遇到了以下示例: for (var i = 0, item; item = a[i++];){ // Do something with item } 其中“a[]”是正在循环的数组 我对“item”在其第一次迭代中将具有的值感到困惑。当i=0且项最初未定义时,则当为其分配a[i++]的值时,迭代不会从i=1开始,这意味着迭代将从a[]数组->a[1]中的第二个元素开始,完全跳过第一个元素a[0]。i++是后增量运算符,

我在MDN网站上阅读JavaScript的重新介绍,在Array部分遇到了以下示例:

for (var i = 0, item; item = a[i++];){
   // Do something with item
}
其中“a[]”是正在循环的数组

我对“item”在其第一次迭代中将具有的值感到困惑。当i=0且项最初未定义时,则当为其分配a[i++]的值时,迭代不会从i=1开始,这意味着迭代将从a[]数组->a[1]中的第二个元素开始,完全跳过第一个元素a[0]。

i++
是后增量运算符,这意味着它将
i
递增
1
,但计算结果为旧的(非递增的)值


i++意味着javascript读取i值,然后将其递增

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
中的值是falsy,循环将提前终止

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

将输出“1 2”,因为“0”是falsy,循环终止

注意,在某些语言中,
++i
也存在,它进行预递增,因此它立即具有新值。++i也存在于JS中,如果您想使用它,请注意,只要数组中的当前元素是
0
false
,循环将结束。这是我以前在JavaScript中见过的最糟糕的循环之一。您可以保存1-2个字符。但是牺牲了索引变量的有用性和可读性。JavaScript中有太多出人意料的错误值。举个例子,看看。
var a = [1,2,0,3,4];
for (var i = 0, item ; item = a[i++];) {
   console.log(item);
}