没有条件检查的for循环

4

我正在阅读这个问题,我无法理解用于“for循环”的概念。

通常,for循环的语法是for(指定值,检查条件,增量){}。他们使用了for循环,但没有进行条件检查,这是如何工作的?

for(var i = arr1.length; i--;) {
    if(arr1[i] !== arr2[i])
        return false;
}

以上代码检查任意两个值是否不同,数组不相同并使用 return false 中断循环。 - Rajesh
因为在for循环内部有明确的条件检查。如果条件变为false,则会返回false。 - Harsh Patel
你可以使用像 Array#filter 这样的数组函数来查找匹配项,这对于查找非常有帮助。 - prasanth
@prasad 不会的。 过滤器会一直循环到结束。这是最好的解决方案。 - Rajesh
我的意思是,使用for循环而不带第二个条件是否可以 - 我们不应该写成 - for(var i = arr1.length;"留空";i--;){} - Deepika Rao
3个回答

18

实际上,这是

for ([initialization]; [condition]; [final-expression])

这里的三个表达式都是可选的

在此情况下,i-- 是一个条件,当它达到 0 时,它是假值,循环停止。
"final-expression" 在此处未使用。

var arr = [1, 2, 3, 4];

for (var i = arr.length; i--;) {
  console.log(arr[i]);
}

for语句将变量i的值设为正整数,然后在每次迭代中评估条件,实际上将i递减至达到一个假值的数字,当i达到零时发生这种情况。


以下是如何跳过for循环中的表达式的其他示例

跳过初始化

var i = 0;
for (; i < 4; i++) {
    console.log(i);
}

跳过条件

for (var i = 0;; i++) {
   console.log(i);
   if (i > 3) break;
}

跳过所有内容

var i = 0;

for (;;) {
  if (i > 4) break;
  console.log(i);
  i++;
}


@DeepikaRao 根据你想做什么,它们都是可选的。for (;;);将编译,但可能不是你想要的。 - flakes

0

仔细查看代码

for(var i = arr1.length; i--;) {
    if(arr1[i] !== arr2[i])
        return false;
}

无论何时浏览器遇到return语句,控制权都会移动到for循环之外,甚至是包含此for循环的函数之外。因此,当满足条件arr1[i] !== arr2[i]时,循环将在没有条件的情况下中断。

0

for循环中的三个参数都是可选的。

这里的循环使用i值从arr1.length -> 1变化。 i的递减是在第二个参数中完成的。 由于第二个参数是用于条件检查的,当i变为零时它会返回一个假值,迭代停止。 如果数组不匹配,循环将在中间返回false。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接