基本概念 - 流程控制语句
⼀.语句的定义
在ECMAscript中,所有的代码都是由语句来构成的。语句表明执⾏过程中的流程、限定与约定,在体现形式上,语句可以单⾏的,也可以由⼀对⼤括号“{}”括起来的复合语句,在语法描述中,复合语句整体可以作为⼀个单⾏语句处理。
1.1 if语句
⼤多数编程语⾔中最为常⽤的⼀个语句就是if 语句,if语句就是条件判断语句
if(5>4) alert('真');
// ⼀⾏的if语句,判断结果为true的时候,则执⾏后⾯⼀条语句,否则不执⾏
if(5<4) {
alert('真');
alert('不管你的条件是否成立,我都会执⾏到')
// ⽤复合语句包含,判断后执⾏⼀条复合语句
}
对于if语句括⾥⾯的表达式,ECMAScript 会⾃动调⽤Boolean()转换函数将这个表达式的结果转换为⼀个布尔值,如果值为true,就执⾏⼀下条,否则不执⾏.
1.2 if(表达式){语句}else{语句}
var result = 98;
if(result > 99){
alert('result⼤于99') //条件为真(true),执⾏这条
} else {
alert('result⼩于99') //条件为假(false),执⾏这条
}
1.3 if(表达式){语句}else if(表达式){语句} ... else{语句}
//官⽅的例⼦
var i = -1;
if (i > 25) {
alert("Greater than 25.");
} else if (i < 0) {
alert("Less than 0.");
} else {
alert("Between 0 and 25, inclusive.");
}
//根据成绩输出对应的成绩字⺟
var result = 79;
if(result>=100){ //如果满⾜条件,不会往下执⾏任何分⽀
alert('A')
}else if(result>=90){
alert('B')
}else if(result>=80){
alert('C')
} else {
alert('D')
}
1.4 do{语句}while
do-while 语句是⼀种后测试循环语句,即只有在循环体中的代码执⾏之后,才会测试出⼝条件。换句话说,在对条件表达式求值之前,循环体内的代码⾄少会被执⾏⼀次。
do-while 语句是⼀种先运⾏,后判断的循环语句,也就是说,不管条件是否满⾜,⾄少先运⾏⼀次循环体。以下是do-while 语句的语法:
var result = 1;
//如果条件是result = 1,执⾏五次,如果条件result⼤于等于5,则执⾏⼀次
do {
alert(result);
result++;
} while (result <= 5)
1.5 while语句
while 语句属于前测试循环语句,也就是说,在循环体内的代码被执⾏之前,就会对出⼝条件求值。因此,循环体内的代码有可能永远不会被执⾏。
while 语句是⼀种先判断,后运⾏的循环语句,也就是说,必须在等条件满⾜之后,⽅可执⾏。⽰例代码:
var result = 5;
// 如果result = 1就执⾏五次,如果⼤于5的时候就不执⾏
while(result <=5 ){
alert(result);
result++;
}
1.6 for语句
for 语句也是⼀种前测试循环语句(语句是⼀种先判断,后运⾏的循环语句),但它具有在执⾏循环之前初始化变量和定义循环后要执⾏的代码的能⼒。
for(var i=0;i<=5;i++){
document.write(i)
// 第⼀步,声明变量,var i=0
// 第⼆步,判断 i<=5
// 第三步,document.write(i)
// 第四步,i++
// 第五步,从第⼆步开始,直到判断条件为false
}
//也可以这样写
var i=0
for(;i<=5;){
document.write(i)
i++
}
此外,for 语句中的初始化表达式、控制表达式和循环后表达式都是可选的。将这三个表达式全部省略,就会创建⼀个⽆限循环,例如:
for(;;){
document.write(1)
}
1.7 for-in语句
for-in 语句是⼀种精准的迭代语句,可以⽤来枚举(遍历)对象的属性;
var result = { //⽤字⾯量的⽅式创建⼀个对象
name:"朱鹏富",
age:18,
height:170
}
for(var key in result){
document.write(key + ':' + result[key] + '<br />')
//可以列举出对象的所有属性和属性值
}
1.8 label语句
使⽤label 语句可以在代码中添加标签,以便将来使⽤。以下是label 语句的语法:
label: statement下⾯是⼀个⽰例:
start: for (var i=0; i < count; i++) {
alert(i);
}
这个例⼦中定义的start 标签可以在将来由break 或continue 语句引⽤。加标签的语句⼀般都要与for 语句等循环语句配合使⽤。
1.9 break和continue语句
// break
for (var index = 0; index < 5; index++) {
if(index === 2) break; //如果条件成立产立即退出整个for循环句话
document.write(index+'<br />');
}
// continue
for (var index = 0; index < 5; index++) {
if(index === 2) continue; //如果条件成立,退出当前⾃⾝循环
document.write(index+'<br />');
}
1.10 with语句
with 语句的作⽤是将代码的作⽤域设置到⼀个特定的对象中
由于⼤量使⽤with 语句会导致性能下降,同时也会给调试代码造成困难,因此在开发⼤型应⽤程序时,不建议使⽤with 语句。
var obj = new Object();
obj.name = '朱鹏富';
obj.age = 18;
obj.height = 170;
// 常规操作
var n = obj.name;
var a = obj.age;
var h = obj.height;
// 可以把上⾯的代码改成这样
with(obj){
var n = name;
var a = age;
var h = height;
}
alert(n)
1.11 switch语句
switch语句是多重条件判断语句,⽤于多个值相等的比较。
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");
}
判断星期⼏
var result = 5;
switch(result){
case 1:
document.write('周⼀')
break;
case 2:
document.write('周⼆')
break;
case 3:
document.write('周三')
break;
case 4:
document.write('周四')
break;
case 5:
document.write('周五')
break;
case 6:
document.write('周六')
// 这⾥的break是故意取消的,业务流程中需要周⽇同时出现
case 7:
document.write('周⽇')
break;
default:
document.write('你输错了')
}
通过为每个case 后⾯都添加⼀个break 语句,就可以避免同时执⾏多个case 代码的情况。假如确实需要混合⼏种情形,不要忘了在代码中添加注释,说明你是有意省略了break 关键字
var result = 2;
switch(result){
/* 合并两种情形 */
case 1:
case 2:
document.write('学习英语')
break;
case 3:
case 6:
document.write('学习数学')
break;
case 4:
case 5:
document.write('物理')
break;
case 7:
document.write('休息')
break;
default:
document.write('不是周⼀到周⽇,没有这个⽇⼦')
}
switch 语句在比较值时使⽤的是全等操作符,因此不会发⽣类型转换(例如,字符串"10"不等于数值10)。