JavaScript数组迭代-MDN示例
我在MDN网站上阅读JavaScript的重新介绍,在Array部分遇到了以下示例: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++是后增量运算符,
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);
}