语句
本课程目的:
- 理解javascript中各种语句结构
- 利用javascript中各种语句和控制结构编写javascript程序
复合语句和空语句
用花括号将多条语句联合在一起,就形成了一条复合语句。
复合语句是一个语句块,它的结尾不需要封号。
1 2 3 4 5 | { var x = Math.PI; var cx = Math.cos(x); alert( 'cos(π)=' + cx); //cos(π)=-1 } |
空语句是允许包含0条语句的语句。它的形式如下:
1 | ; |
空语句不会执行任何动作。
声明语句
1. var
var语句用来声明变量的。它后面跟随的是要声明的变量列表,列表中的每个变量都可以带有初始化表达式,用于指定其初始值。
1 | var x = 1,y = 2,z; |
如果var语句出现在函数体内,那么它声明的变量是局部变量;如果在顶层代码中使用var语句,那它声明的是全局变量。(全局变量和局部变量在之前的章节中有提到)
如果用var声明的变量没指定初始值,那么其值为undefined。它声明的变量会被提前到函数顶部,但在声明语句前它的值都是undefined。
1 2 3 4 5 6 | function test_var(){ alert(x); //undefined var x = 1; alert(x); //1 } test_var(); |
2. function
function关键字是用来定义函数的。
函数声明语句语法格式:
1 2 3 | function funcname([arg1,[arg2[...,argn]]]){ statements } |
funcname是要声明的函数名称,之后跟用逗号隔开的参数列表。花括号内是函数语句。
1 2 3 4 | //函数声明语句 function sum(x,y){ return x + y; } |
上面一个例子,用函数定义表达式,也可以达到同样的效果,写法如下:
1 2 3 4 | //函数定义表达式 var sum = function (x,y){ return x + y; } |
函数声明语句也会被提前,即可以在定义它之前的代码中被调用,而函数定义表达式语句必须在定义它之后调用。
3. if语句
if语句是种条件控制语句,有两种形式,分别为:
1 2 3 | if (expression){ statement } |
和
1 2 3 4 5 | if (expression){ statement1 } else { statement2 } |
第一种形式,如果expression值为真,则执行statement。第二种形式增加了一个else从句,当expression值为真时执行statement1,当expression值为假时执行statement2.
1 2 3 4 5 6 7 8 9 | var x = 1,y = 2; if (x > 0){ alert( 'x的值大于0' ); //x的值大于0 } if (x > y){ alert( 'x比y大' ); //x比y小,这条语句不会被执行 } else { alert( 'x比y小' ); //x比y小 } |
当代码中有多条分支的时候,if语句还可以与else if从句一起配合使用。写法如下:
1 2 3 4 5 6 7 | if (expression1){ statement1 } else if (expression2){ statement2 } else { statement3 } |
这段代码的意思是:当expression1值为真时,执行statement1,若expression1值为假则判断expression2的值,若expression2值为真,则执行statement2,否则继续判断接下来else if从句中的表达式。以此类推,直到一个条件满足,执行其中的代码,若所有条件都不满足,则执行最后的else语句中的代码。
1 2 3 4 5 6 7 8 9 10 11 12 | var age = prompt( '请输入年龄' ,20); if (age < 0){ alert( '别这样,严肃点!' ); } else if (age >= 0 && age < 18){ alert( '还是个小孩儿!' ); } else if (age >= 18 && age < 50){ alert( '是个大人!' ); } else if (age >= 50 && age < 120){ alert( '已经老了!' ); } else { alert( '这是要成精的节奏啊!' ); } |
4. switch语句
Switch语句与if语句关系很密切,很多时候能够相互转换。Switch语句也是一种条件控制语句。它的语法形式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | switch (expression){ case value1: statement1 break ; case value2: statement2 break ; case value3: statement3 break ; ... case valuen: statementn break ; default : statement; } |
这段代码是这样执行的:首先是计算expression的值,然后由上至下与case后面的value值进行匹配,如果相等,则执行后面的语句,然后跳出switch语句,如果都不相等,则执行最后的default语句。通常情况下,switch语句都会带有default语句,若没有default语句,则switch的整个语句块都将被跳过。
注意:expression的值与case后的value值是执行全等判断的,即不会进行任何类型转换。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | var age = prompt( '请输入年龄' ,20); switch ( true ){ case age < 0: alert( '别这样,严肃点!' ); break ; case age >= 0 && age < 18: alert( '还是个小孩儿!' ); break ; case age >= 18 && age < 50: alert( '是个大人!' ); break ; case age >= 50 && age < 120: alert( '已经老了!' ); break ; default : alert( '这是要成精的节奏啊!' ); } |
从这个例子可以看出,case后面可以跟一个任意的表达式。最常见的是跟随数字或字符串。
5. while语句
while语句是一种基本的循环语句,它的语法如下:
1 2 3 | while (expression){ statement } |
在执行statement之前,会先计算expression的值,若值为真,则执行statement,若值为假,则会跳过statement转而执行程序中的下一条语句。
注意,使用while(true)会创建一个死循环,因为条件永远满足。
1 2 3 4 5 | var i = 0; while (i < 10){ alert(i); i++; } |
这个例子初始化i=0,当i小于10时,都弹出i的值,会依次弹出0~9的数字。
6. do/while语句
do/while也是循环语句,它与while语句非常相似,唯一不同的是:它的条件判断语句是在循环体尾部的,这就意味着,不管条件成不成立,循环体都至少执行了一次。
do/while循环语句的语法如下:
1 2 3 | do { statement } while (expression); |
注意:do/while循环式用分号结尾的。如果while语句的循环体使用花括号括起来,则可以不使用分号做结尾。
1 2 3 4 5 | var i = 0; do { alert(i); i++; } while (i < 10); |
这个例子,同样也是弹出0~9的数字。
7. for语句
for语句也是一种循环控制结构语句,它的语法如下:
1 2 3 | for (initialize;test;increment){ statement } |
initialize,test,increment三个表达式分别表示:初始化操作、循环条件判断和计数器变量更新。当条件满足时,执行statement。
注意,initialize可以同时声明并初始化一个计数变量。
将前面的while循环语句改成for循环语句,如下:
1 2 3 | for ( var i = 0; i < 10; i++){ alert(i); } |
这个循环同样输出数字0~9.
此外,for语句中的初始化表达式、控制表达式和循环后表达式都是可选的。将这两个表达式全部省略,将会创建一个无限循环:
1 2 3 | for (;;){ statement } |
8. break语句和continue语句
break和continue语句都是一种跳转语句。
二者的区别:break语句会立即跳出循环,强制继续执行循环后面的语句。而continue语句则只是跳出本次循环,然后从循环的顶部继续执行代码。
1 2 3 4 5 6 7 8 | var num = 0; for ( var i = 1; i < 10; i++){ if (i % 5 == 0){ break ; } num++; } alert(num); //4 |
这个例子中,num用于记录循环执行的次数。变量i由1递增至10,在这个过程中,循环体内会判断i的值是否能被5整除,如果是则由break语句跳出循环,执行alert语句。由结果显示,当循环只执行了4次。
1 2 3 4 5 6 7 8 | var num = 0; for ( var i = 1; i < 10; i++){ if (i % 5 == 0){ continue ; } num++; } alert(num); //8 |
同样的例子,不同的是由continue代替break。结果显示,循环一共执行了8次。当变量i变成5时,满足if条件,则由continue跳出本次循环,num此次没能执行加1的操作。然后循环又从头开始执行,i值等于6。就这样循环一直执行到i等于10时结束。