1.if 语句
if (condition) statement1 else statement2
condition (条件)可以为任意表达式;且对这个表达式求值得结果不一定是布尔值,ECMAScript 会自动将其转换为布尔值。
condition 为 true 则执行 statement1,否则执行 statement2。statement1 和 statement2 既可以是一行代码,也可以是一个代码块。
if (i > 25)
alert("Greater than 25."); // 单行语句
else {
alert("Less than or equal to 25."); // 代码块中的语句
}
推荐使用代码块,提高可读性。
2.do-while 语句
后测试循环语句,循环体中代码执行后,才测试出口条件。即循环体内的代码至少会被执行一次。
do { statement } while (expression);
eg:
var i = 0;
do {
i += 2;
} while (i < 10);
alert(i);
3.while 语句
前测试循环语句,测试出口条件后,才判断是否执行循环体内代码。
while(expression) statement
eg:
var i = 0;
while (i < 10) {
i += 2;
}
4.for 语句
前测试循环语句,但他具有在执行循环前初始化变量和定义循环后要执行的代码的能力。
for (initialization; expression; post-loop-expression) statement
eg:
var count = 10;
for (var i = 0; i < count; i++){
alert(i);
}
只有当 i < count 时,才执行循环体中的代码,执行了循环体中的代码,就会执行循环后表达式 ( i ++ );同下面的 while 语句:
var count = 10;
var i = 0;
while (i < count){
alert(i);
i++;
}
for 语句中的初始化表达式、控制表达式和循环后表达式都是可选的。将这三个表达式全部 省略,就会创建一个无限循环,例如:
for (;;) { // 无限循环 doSomething(); }
而只给出控制表达式实际上就把 for 循环转换成了 while 循环,例如:
var count = 10;
var i = 0;
for (; i < count; ){
alert(i);
i++;
}
由于 for 语句存在极大的灵活性,因此它也是 ECMAScript中常用的一个语句。
5.for-in 语句
for-in 语句是一种精准的迭代语句,可以用来枚举对象的属性。特点:全部枚举,但无序。
for (property in expression) statement
eg:
for (var propName in window) {
document.write(propName);
}
在这个例子中,我们使用for-in 循环来显示了BOM 中window 对象的所有属性。每次执行循环时,都会将window 对象中存在的一个属性名赋值给变量propName。这个过程会一直持续到对象中的所有属性都被枚举一遍为止。与for 语句类似,这里控制语句中的var 操作符也不是必需的。但为了保证使用局部变量,我们推荐上面例子中的这种做法。
ECMAScript 对象的属性没有顺序。因此,通过for-in 循环输出的属性名的顺序是不可预测的。具体来讲,所有属性都会被返回一次,但返回的先后次序可能会因浏览器而异。
6.label 语句
label 语句可以在代码中添加标签,以便将来使用。如:
label: statement
eg:
start:
for (var i=0; i < count; i++) {
if(i === 10){
alert(i);
break start;
}
}
start 标签表示外部的 for 语句,可以在后面由 break 或 continue 语句引用。如上,当 i === 10 时,则跳出外层的 start 后面的循环,继续执行 start 循环外面的语句。加标签的语句一般都要与 for 语句等循环语句配合使用。
label 标签使用过度会给调试带来麻烦,因此建议使用 label 语句,一定要使用描述性的标签,同时不要嵌套过多的循环。
7.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
var num = 0;
for (var i=1; i < 10; i++) {
if (i % 5 == 0) {
continue;
}
num++;
}
alert(num); //8
8.with 语句
with 语句的作用是将代码的作用域设置到一个特定的对象中。with 语句的语法如下:
with (expression) statement;
定义with 语句的目的主要是为了简化多次编写同一个对象的工作,如下面的例子所示:
var qs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href;
上面几行代码都包含location 对象。如果使用with 语句,可以把上面的代码改写成如下所示:
with(location){
var qs = search.substring(1);
var hostName = hostname;
var url = href;
}
在这个重写后的例子中,使用with 语句关联了location 对象。这意味着在with 语句的代码块内部,每个变量首先被认为是一个局部变量,而如果在局部环境中找不到该变量的定义,就会查询location 对象中是否有同名的属性。如果发现了同名属性,则以location 对象属性的值作为变量的值。
严格模式下不允许使用with 语句,否则将视为语法错误。
9.switch 语句
switch (expression) {
case value: statement
break;
case value: statement
break;
case value3:
/* 合并两种情形*/
case value4: statement
break;
default: statement
}
switch 语句中的每一种情形(case)的含义是:“如果表达式等于这个值(value),则执行后面的语句(statement)”。而break 关键字会导致代码执行流跳出switch 语句。如果省略break 关键字,就会导致执行完当前case 后,继续执行下一个case。最后的default 关键字则用于在表达式不匹配前面任何一种情形的时候,执行机动代码(因此,也相当于一个else 语句)。
合并两种情形的时候,不需要加 break,但要添加注释。
特点:
1)switch 语句中可以使用任何数据类型(字符串、对象均可);
2)每个 case 的值不一定是常量,可以是变量,甚至表达式。
3)switch 的 case 判断使用的时全等,所以不会发生类型转换。