for循环的语法有多严格

时间:2015-07-23 14:34:43

标签: javascript loops

所以我在编码方面有相当多的经验。我已经涉足Basic,HTML,Javascript,C和C ++,尽管我最近使用的是HTML和Javascript。

我非常熟悉for循环。我已经多次使用它来循环遍历数组,操作递归函数等等。我知道它的作用以及如何使用它,但我的问题是 它是如何工作的。

前提

在大多数语言中,for循环的基本语法是这样的:

var upperLimit = 10;

for(var i = 0; i < upperLimit; i++) {
    /*Code to be executed*/
    console.log(i);
}

在Javascript中,这将在控制台中输出0到9之间的数字。

我知道括号包含3个部分,每个部分用分号分隔。

  • 第一个是初始化,它通常设置用于循环语句的变量。
  • 第二个是条件,它在执行大括号之间的任何代码之前运行。如果它导致True,则执行代码。否则,for循环停止。
  • 第三个是增量,它包含要在循环中执行的最后一位代码,以及扩展名,在下一个条件检查之前执行的最后一项。

问题

那么,我的问题是,这些定义有多严格?

初始化的定义并不容许。它只是表示该行执行一次,它在循环中的其他任何内容之前执行,并且它的范围仅限于循环。除了迭代变量之外,我无法想到你想要放在那个位置的其他东西。

但是另外两个呢?我已经看到了条件只是变量的代码,只要它是正的(因为正数作为布尔值只能转换为true),循环就会继续。

然后是增量,这似乎是这些部分中最松散的。它真的只是在代码中执行的最后一件事,还是显式需要迭代初始化中声明的变量?它似乎是我熟悉的语言的前者。

例如,我决定制作一个非标准的for循环,我想出了这个例程:

var numbers = [0,1,2,3,4,5,6,7,8,9];

for(var i = 0;
    numbers.length;
    console.log(numbers.pop())) {}

它完全按照我的预期运行:它以降序输出控制台中数字数组的每个成员,之后留下一个空数字数组,并且使用基本上为空的for循环完成它。 / p>

结束

我的假设是否正确?如果是这样的话,是否有任何实际的应用程序以一种格式使用for-loop,而不是我在这个问题的顶部写的那种格式(可能更接近第二种格式)?

3 个答案:

答案 0 :(得分:1)

首先,你给出一个数组

var numbers = [0,1,2,3,4,5,6,7,8,9];

以下代码是正确的循环。

for(var i = 0;
    numbers.length;
    console.log(numbers.pop())) {}

为此类定义的Javascript

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

对于代码初始化,'var i = 0',并在循环开始时执行一次。

条件为'numbers.length',值为10.当数字不为0时,Javascript会将其转换为布尔值true。条件成真。

最终表达式是'console.log(numbers.pop())'。执行'numbers.pop()'时,numbers.length更改为9.但它仍然是真的。

第二次,条件将再次返回true。最终表达式也是执行。

在numbers.length变为0之前,Javascript将其转换为布尔值false。循环结束。

答案 1 :(得分:0)

  • 初始化变量的范围不限于循环,它对整个函数有效(在该行之前未定义)。您可以使用逗号初始化多个变量。 for (var i=0, j=1; i < 10; i++)
  • 第二部分,任何评估为真值的东西都会导致循环继续:
    • Truthy:1,-1,true,&#34;某事&#34;,{a:2}
    • Falsey:0,false,null,undefined
    • 您可以省略这一点并依赖代码中断
  • 第三部分只是让你更新循环变量,你可以省略它并在for循环体内进行。

Here's an answer提供了一种很好的非循环循环方式,并附带警告,请参阅链接。

var list = [{a:1,b:2}, {a:3,b:5}, {a:8,b:2}, {a:4,b:1}, {a:0,b:8}];

for (var i=0, item; item = list[i]; i++) {
  // Look no need to do list[i] in the body of the loop
  console.log("Looping: index ", i, "item" + item);
}

答案 2 :(得分:0)

在大多数语言中,for循环的基本语法是这样的:

for(initialization; condition; iteration) {
    /*Code to be executed*/
}

这两个都是通常的表达式,你可以在这里使用任何有效的表达式:

for(
  var i=arr.length, othercond=true; 
  i; 
  othercond?i--:i++, console.log(i),updateothercond()
);