if语句
大多数编程语言中最为常用的语句就是if语句,一下是if语句的基本语法:
if(condition) statement1 else statement2
其中condition(条件),可以是任意值;ECMAScript会自动调用Boolean()转换函数将这个条件的结果转换为一个布尔值。如果condition值结果为true,则执行statement1,如果为false,则执行statement2。请看下面例子
if (i>25){
alert("a");
}else{
alert("b");
}
do-while语句
do-while语句是一种后测试语句,即只有在循环体中的代码执行之后,才会测试出口条件。换句话说,在对条件表达式求值之前,循环体内的代码至少会被执行一次。以下是do-while语句的语法:
do{
statement
}while(expression)
下面是一个示例:
var i=0;
do{
i+=2;
}while(i<10);
alert(i);
在这个例子中,只要变量的值小于10,循环就会一直继续下去。而且变量i的初始值为0,每次循环都会递增2。
像do-while这种后测试循环语句最常用于循环体中的代码至少要被执行一次的情形。
while语句
while语句属于前测试循环语句,也就是说,在循环代码执行之前,就会对出口条件求值。也有可能,循环体内的代码有可能永远不会被执行。以下是while语句的语法:
while(expression) statement
下面是一个示例:
var i=0;
while(i<10){
i+=2;
}
for语句
for语句也是一种前测试循环语句,但它具有循环执行之前初始化变量和定义循环后要执行的代码的能力。以下是for语句的语法:
for(initialization;expression;post-loop-expression) statement
下面是一个示例:
var count=10;
for(var i=0;i<count;i++){
alert(i);
}
以上代码定义了变量i的初始值为0。只有当当表达式(i
var count=10;
var i=0;
while(i<count){
alert(i);
i++;
}
for-in语句
for-in语句是一种精准的迭代语句,可以用来枚举对象的属性。以下是for-in语句的语法:
for (property in expression) statement
下面是一个示例:
for(var propName in window){
document.write(propName);
}
在这个例子中,使用for-in循环显示了BOM中window对象的所有属性。每次执行循环时,都会将window对象中存在的一个属性名赋值给变量proName。这个过程会一直持续到对象中的所有属性都被枚举一遍为止。
但是,如果要迭代的对象的变量值为null或undefined,for-in语句会抛出错误。ECMAScript5对这种情况不在抛出错误,而是不执行循环体。为了保证兼容性,建议在使用for-in循环之前,先检测该对象的是不是null或undefined。
label语句
使用label语句可以在代码中添加标签,以便将来使用。以下是label语句的语法:
label:statement
下面是一个示例:
start:for(var i=0;i<count;i++){
alert(i);
}
这个例子中定义的start标签可以在将来由break或continue语句引用。加标签的语句一般都要与for语句等循环语句配合使用。
以上是书上给出的解释。举一个比较典型的例子(未加label):
var num=0;
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5&&j==5){
break;
}
num++;
}
}
alert(num);//循环在i为5,j为5的时候跳出j循环,但会继续执行i循环,输出95
使用label之后的程序:
var num=0;
outPoint;
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5&&j==5){
break outPoint;
}
num++;
}
}
alert(num);//循环在i为5,j为5的时候跳出双循环,返回到outPoint层继续执行,输出55
break和continue语句
break和continue语句用于在循环中精确地控制代码的执行。其中,break语句会立即退出循环,强制继续执行循环后面的语句。而continue语句虽然也是立即退出循环,但退出循环后会从循环的顶部继续执行。请看下面例子:
var num=0;
for(var i=1;i<10;i++){
if(i%5==0){
break;
}
num++;
}
alert(num);//4
这个例子中的for循环会将变量i由1递增至10,。在循环体内,有一个if检查i的值是否可以被5整除。如果是,则执行break语句退出循环。另一方面,变量num从0开始,用于记录循环执行的次数。在执行break语句之后,要执行的下一行代码时alert()函数,结果显示4.也就是说,在变量i=5时,循环总共执行了4次;而break语句的执行导致了循环在num再次递增之前就退出了。如果在这里把break替换为continue的话,则会看到另一种结果:
var num=0;
for(var i=1;i<10;i++){
if(i%5==0){
continue;
}
num++;
}
alert(num);//8
例子的结果显示8,也就是循环总共执行了8次。当i=5时,循环会在num再次递增之前退出此次循环,但接下来依旧会执行下一次循环,即i=6的循环。于是,循环又继续执行,直到i等于10时自然结束。而num的最终值之所以是8,是因为continue语句导致它少递增一次。
switch语句
switch语句与if语句的关系最为密切,而且也是在其他语言中普遍使用的一种流控制语句。如下所示:
switch(expression){
case value:statement
break;
case value:statement
break;
case value:statement
break;
default:statement
}
switch语句中的每一种情形(case)的含义是:“如果表达式等于这个值(value),则执行后面的语句(statement)”。而break关键字会导致代码执行流跳出switch语句。如果省略break关键字,就会导致执行完当前case之后,继续执行下一个case。最后的default关键字则用于表达式不匹配前面任何一种情形的时候,执行机动代码(相当于一个else语句)。
从根本上讲,switch语句就是为了让开发人员免于编写像下面这样的代码:
if(i==25){
alert("25");
}else if(i==35){
alert("35");
}else if(i==45){
alert("45");
}else{
alert("other");
}
而与此等价的switch语句如下所示:
switch(i){
case 25:
alert("25");
break;
case 35:
alert("35");
break;
case 45:
alert("45");
break;
default:
alert("other");
}
通过为每个case后面都添加一个break语句,就可以避免同时执行多个case代码的情况。假如确实需要混合几种情形,不要忘了在代码中添加注释,说明你是有意省略了break关键字,如下所示:
switch(i){
case 25:
/*合并两种情形*/
case 35:
alert("25 or 35");
break;
case 45:
alert("45");
break;
default:
alert("other");
}