语句(statement)就是JavaScript整句或命令,以分号分隔。
JavaScript程序无非就是一系列可执行语句的集合。默认情况下,JavaScript解释器依照语句的编写顺序依次执行。另一种“使某事件发生”的方法是改变语句的默认执行顺序。JavaScript中有很多语句和控制结构来改变语句的默认执行顺序:
条件语句:JavaScript解释器可以根据一个表达式的值来判断执行还是跳过这些语句,如if语句和switch语句。循环语句:可以重复执行语句,如while和for语句。跳转语句:可以让解释器跳转至程序的其他部分继续执行,如break、return和throw语句表达式语句:具有副作用的表达式是JavaScript中最简单的语句。
例如:
greeting="hello"+name;
复合语句:可以用逗号运算符将几个表达式连接在一起,形成一个表达式,同样JavaScript中还可以将多条语句联合在一起,形成一条复合语句,只需要用花括号括起来即可。
例如:
{
x=Math.PI;
cx=Math.cos(x);
console.log("cos(PI)="+cx);
}
注意:语句块的结尾不需要分号
空语句:允许包含0条语句,JavaScript解释器执行空语句时显然不会执行任何动作。
例如:
;
声明语句:var和function都是声明语句,它们声明或定义变量或函数。
var
var语句用来声明一个或者多个变量,语法如下:
var name_1[=value_1][,……,name_n[=value_n]]
var声明的变量无法通过delete删除。如果var语句中的变量没有指定初始化表达式,那么这个变量的值初始为undefined。变量声明会“提前”至脚本或者函数的顶部,但是初始化的操作则还是在原来var语句的位置执行。
例如:
var j=0,x=2;
function
关键字function用来定义函数,函数声明语法如下:
function funcname([arg1[,arg2[……,argn]]]){
statements
}
funcname是要声明的函数名称的标识符。函数名之后的圆括号中是参数列表,参数之间用逗号分隔。函数声明语句通常出现在JavaScript代码的最顶层,也可以嵌套在其他函数体内。但在嵌套时,函数声明只能出现所嵌套函数的顶部。
例如:
function factorial(n){ //递归函数
if(n<=1) return 1;
return n*factorial(n-1);
}
函数声明语句和函数定义表达式包含相同的函数名,但二者仍然不同:
两种方式都创建了新的函数对象,但函数声明语句中的函数名是一个变量名,变量指向函数对象。和通过var声明变量一样,函数定义语句中的函数被显式的“提前”到了脚本或函数的顶部。因此它们在整个脚本和函数内都是可见的。使用var的话,只有变量声明提前了——变量的初始化代码仍然在原来的位置。然而使用函数声明语句的话,函数名称和函数体均提前:脚本中的所有函数和函数中所有嵌套的函数都会在当前上下文中其他代码之前声明。也就是说,可以在生命一个JavaScript函数之前调用它。
条件语句:条件语句是通过判断指定表达式的值来决定执行还是跳过某些语句。
if
if语句是一种基本的控制语句,有两种形式:
if(expression)
statements
或
if(expression)
statement1
else
statement2
注意:if/else语句中,else总是和就近的if语句匹配。
例如:
if(n==1)
console.log("You have 1 new message.");
else
console.log("You have"+n+"new messages.");
else if
例如:
if(n==1){
//执行代码1
}
else if(n==2){
//执行代码2
}
else if(n==3){
//执行代码3
}
else{
//之前的条件都为false,则执行这里的代码块
}
switch
语法:
switch(expression){
statements
}
代码块中可以使用多个Case关键字标识的代码片段,case之后是一个表达式和一个冒号。如果Switch表达式与所哟Case表达式都不匹配,则执行标记为default的语句块。default标签可以放在switch语句内的任何地方。(这里的相同是按照"==="运算符比较的。)
循环:循环语句就是程序路径的一个回路,可以让一部分代码重复执行。
while
语法:
while(expression)
statement
在执行While语句之前,JavaScript解释器首先计算expression的值,如果它的值是假值,那么程序将跳过循环体中的逻辑statement转而执行程序中的下一条语句。反之,如果表达式Expression是真值,JavaScript解释器将执行循环体内的逻辑,然后再次计算表达式expression的值,这种循环会一直继续下去,直到expression的值为假值为止。(循环体可能一次也不执行)
例如:
var count=10;
while(count<10){ //输出0-9
console.log(count);
count++;
}
do/while
语法:
do
statement
while(expression);
循环体至少会执行一次。
for
语法:
for(initialize;test;increment)
statement
initialize、test、increment三个表达式之间用分号分隔,分别负责初始化操作,循环条件判断和计数器变量的更新。
for/in
语法:
for(variable in object)
statement
variable通常是一个变量名,也可以是一个可以产生左值的表达式或者一个通过var语句声明的变量,总之必须是一个适用于赋值表达式左侧的值。object是一个表达式,这个表达式计算结果为对象。(for循环遍历数组较为简单,for/in遍历对象属性成员比较方便)
for/in循环并不会遍历对象的所有属性,只有“可枚举”的属性才会遍历到。
例如:
for(var p in o)
console.log(o[p]);
跳转:它使得JavaScript的执行可以从一个位置跳转到另外一个位置。
标签语句:标签是由语句前的标识符和冒号组成:
identifier:statement //可以在程序的任何地方通过标签名引用这条语句
break语句:作用是立即退出最内层的循环或者switch语句.它的语法如下:
break;
JavaScript中同样允许break关键字后跟随一个语句标签: break labelname;
当break和标签一块使用时,程序将跳转到这个标签所标识的语句块结束,或者直接终止这个闭合语句块的执行。
continue语句:转而执行下一次循环。(只能在循环体内使用)
语法:
continue;
或
continue labelname;
return语句:指定函数调用后的返回值,只能在函数体内出现。return语句可以单独使用而不必带有expression,这样的话函数也会向调用程序返回undefined。
语法:
return expression;
throw语句
所谓异常是当发生了某种异常情况或错误时产生的一个信号。抛出异常就是用信号通知发生了错误或异常状况。捕获异常是指处理这个信号,即采取必要的手段从异常中回府。
throw语法:
throw expression;
捕获异常:
try{ //定义了需要处理的异常所在的代码块
}
catch(e){ //当try块内某处发生了异常时,调用catch内的代码逻辑
}
finally{ //放置清理代码,不管try块中是否产生异常,finally块内的逻辑总会执行
}
其他语句类型
with语句:用于临时扩展作用域链(不赞成使用)
语法:
with(object)
statement
这条语句将object添加到作用域链的头部,然后执行statement,最后把作用域链恢复到原始状态。
debugger语句:debugger语句通常什么也不做,当调试程序可用并运行的时候,JavaScript解释器将会以调试模式运行。实际上,这条语句用来产生一个断点。
use strict语句:目的是说明后续的代码将会解析为严格代码。严格代码以严格模式执行。
