7. 语句
if 语句
if 语句的语法:
if (condition) statement1 else statement2
其中的 condition(条件)可以是任意表达式;ECMAScript 会自动调用 Boolean() 转换函数将这个表达式的结果转换为一个布尔值。如果对 condition求值的结果是 true ,则执行statement1 (语句1),如果对condition求值的结果是 false ,则执行statement2(语句 2)。而且这两个语句既可以是一行代码,也可以是一个代码块(以一对花括号括起来的多行代码)。
if (i > 25)
alert("Greater than 25."); // 单行语句
else {
alert("Less than or equal to 25."); // 代码块中的语句
}
不过,业界普遍推崇的最佳实践是始终使用代码块,即使要执行的只有一行代码。这样代码逻辑更清晰更容易维护。
if (i > 25) {
alert("Greater than 25.");
} else if (i < 0) {
alert("Less than 0.");
} else {
alert("Between 0 and 25, inclusive.");
}
do-while 语句
do-while 语句是一种先执行再判断循环条件的循环语句(代码至少要被执行一次)。语法:
do {
statement
} while (expression);
下面是一个示例:
var i = 0;
do {
i += 2;
} while (i < 10);
alert(i);
在这个例子中,只要变量 i 的值小于 10,循环就会一直继续下去。而且变量 i 的值最初为 0,每次循环都会递增 2。
while 语句
while 语句属于先判断循环条件再执行循环体的循环语句。语法:
while(expression) statement
示例:
var i = 0;
while (i < 10) {
i += 2;
}
在这个例子中,变量 i 开始时的值为 0,每次循环都会递增 2。而只要 i 的值小于 10,循环就会继续下去。
for 语句
for 语句也是一种前测试循环语句,但它具有在执行循环之前初始化变量和定义循环后要执行的代码的能力。以下是 for 语句的语法:
for (initialization; expression; post-loop-expression) statement
下面是一个示例:
var count = 10;
for (var i = 0; i < count; i++){
alert(i);
}
在 for 循环的变量初始化表达式中,也可以不使用 var 关键字:
var count = 10;
var i;
for (i = 0; i < count; i++){
alert(i);
}
for-in 语句
for-in 语句是一种精准的迭代语句,可以用来枚举对象的属性。以下是 for-in 语句的语法:
for (property in expression) statement
下面是一个示例:
for (var propName in window) {
document.write(propName);
}
ECMAScript 对象的属性没有顺序。因此,通过 for-in 循环输出的属性名的顺序是不可预测的。
具体来讲,所有属性都会被返回一次,但返回的先后次序可能会因浏览器而异。
label 语句
label 语句可以在代码中添加标签,以便将来使用。以下是 label 语句的语法:
label: statement
下面是一个示例:
var num = 0;
outermost:
for (var i=0; i < 10; i++) {
for (var j=0; j < 10; j++) {
if (i == 5 && j == 5) {
break outermost;
}
num++;
}
}
alert(num); //55
在这个例子中, outermost 标签表示外部的 for 语句。内部循环中的 break 语句带了一个参数:要返回到的标签。添加这个标签的结果将导致 break 语句直接退出外部的 for 语句(即使用变量 i 的循环)。
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
with 语句
with 语句的作用是将代码的作用域设置到一个特定的对象中。 with 语句的语法如下:
with (expression) statement;
示例:
with(location){
var qs = search.substring(1);
var hostName = hostname;
var url = href;
}
with 语句把三个声明语句关联了 location 对象,同时三个变量则变成了location的局部变量。
注:由于大量使用 with 语句会导致性能下降,同时也会给调试代码造成困难,因此在开发大型应用程序时,不建议使用 with 语句。
switch 语句
switch 是一种流控制语句,和if最为接近。语法如下:
switch (expression) {
case value:
statement
break;
case value:
statement
break;
case value:
statement
break;
case value:
statement
break;
default: statement
}
一个if的例子:
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");
}
switch 语句在比较值时使用的是全等操作符,因此不会发生类型转换(例如,字符串 “10” 不等于数值 10)。
var i="10";
switch(i){
case 10:
alert("这是个数字");
break;
default:
alert("这不是数字")
}
// 输出“这不是数字”
ECMAScript建议switch语句中必须包含default。这样语句完整,而且程序不易出现意外的错误