流程控制

  JavaScript支持的流程控制也很丰富,JavaScript支持基本的分支语句,如if、if ...else等;也支持基本的循环语句,如while、for等;还支持for in循环等;循环相关的break、continue,以及带标签的break、continue语句也是支持的。

分支

  分支语句主要有if语句和switch语句。其中if语句有如下3种形式。
  第一种形式:

if(expression)  
{
    statements
}

  第二种形式:

if(expression)  
{
    statements
}
else  
{
    statements
}

  第三种形式:

if(expression)  
{
    statements
}
else if(expression)  
{
    statements
}
...
else  
{
    statements
}

  通常,不要省略if、else、else if后执行块的花括号,但如果语句执行块只有一行语句时,则可以省略花括号。
  switch语句的语法格式如下:

switch (expression)  
    {
        case condition 1: statements;
            break;
        case condition 2: statements;
            break;
        ...
        case condition n: statements;
            break;
        default: statements;
    }

  这种分支语句的执行是先对expression求值,然后依次匹配condition1、condition2、condition3等条件,遇到匹配的条件即执行对应的执行体;如果前面的条件都没有正常匹配,则执行default后的执行体。
  与Java的switch语句完全类似,JavaScript的switch语句中也可省略case块后的break语句,如果省略了case块后的break语句,JavaScript将直接执行后面case块里的代码,不会理会case块里的条件,直到遇到break语句为止。

while循环

  while循环的语法格式如下:

while(expression)  
{
    statements
}

  当循环体只有一行语句时,循环体的花括号可以省略。while循环的作用是:先判断expression逻辑表达式的值,当expression为true时,执行循环体;当expression为false时,则结束循环。值得注意的是,一定要让expression有为false的时候,否则循环将成为死循环,永远无法结束循环。

do while循环

  do while循环与while循环的区别在于:while循环是先判断循环条件,只有条件为真才执行循环体;而do while循环则先执行循环体,然后判断循环条件,如果循环条件为真,则执行下一次循环,否则中止循环。do while循环的语法格式如下:

do  
{
    statements
}
while (expression);  

  与while循环类似的是,如果循环体只有一行语句,则循环体的花括号可以省略,与while循环的区别在于:while循环的循环体可能得不到执行,但do while的循环体至少执行一次。

for循环

  for循环是更加简洁的循环语句,大部分情况下,for循环可以代替while循环、do while循环。for循环的基本语法格式如下:

for(initialization; condition; iteration)  
{
    statements
}

  与前面循环类似的是,如果循环体只有一行语句,则循环体的花括号可以省略。for后面的括号里面只有两个分号是必需的,其他都是可以省略的。for后的括号里面以两个分号隔开了三个语句,其中第一个语句是循环的初始化语句,每个循环语句只会执行一次,而且完全可以省略,因为初始化语句可以放在循环语句之前完成;第二个语句是一个逻辑表达式,用于判断是否执行下一次循环。因此,在通常情况下,第二个语句都是不可省略的,如果省略该循环条件,则循环条件一直为true,也就变成了死循环;第三个语句是循环体执行完后最后执行的语句,这个语句也完全可以放在循环体的最后执行。

for in循环

  for in循环的本质是一种foreach循环,它主要有两个作用:
  ➢ 遍历数组里的所有数组元素。
  ➢ 遍历JavaScript对象的所有属性。
  for in循环的语法格式如下:

for(index in object)  
{
    statements
}

  与前面类似的是,如果循环体只有一行代码,则可以省略循环体的花括号。
  当遍历数组时,for in循环的循环计数器是数组元素的索引值。除此之外,for in循环还可遍历对象的所有属性。此时,循环计数器是该对象的属性名。

例子
<script type="text/javascript">  
    // 在页面输出静态文本
    document.write("<h1>Navigator对象的全部属性如下:</h1>");
    // 遍历navigator对象的所有属性
    for (propName in navigator)
    {
        // 输出navigator对象的所有属性名,以及对应的属性值
        document.write('属性' + propName + '的值是:' + navigator[propName]);
        document.write("<br />");
    }
</script>  

break和continue

  break和continue都可用于中止循环,区别是continue只是中止本次循环,接着开始下一次循环(我们也可以视continue为忽略本次循环后面的执行语句);而break则是完全中止整个循环,开始执行循环后面的代码。
  如果在break或continue后使用标签,则可以直接跳到标签所在的循环。至于使用break和continue的区别与前面类似,break是完全中止标签所在的循环,而continue则是中止标签所在的本次循环。所谓标签,就是在一个合法的标识符后紧跟一个英文冒号(:),标签只有放在循环之前才有效,标签放在其他地方将没有意义。

例子
<script type="text/javascript">  
    // 使用outer标签表明外部循环
    outer:
    for (var i = 0 ; i < 5 ; i++)
    {
        for (var j = 0 ; j < 5 ; j++)
        {
            document.writeln('j的值为:' + j);
            // 当j >= 2时,使用break跳出outer循环。
            if (j >= 2) break outer;
            document.writeln('i的值为:' + i);
            document.writeln('<br />');
        }
    }
</script>  


  当j = 2时,使用break完全中止循环,break后还有outer标签,这将完全中止outer标签对应的循环。即当j = 2时,仅执行了document.writeln('j的值为:' + j)代码,两层循环完全结束。

注:本博客内容节选自李刚编著的疯狂HTML 5/CSS 3/JavaScript讲义 ,详细内容请参阅书籍。