javascript语句是发给浏览器的命令。javascript语句的作用是告诉浏览器做什么。
6.1表达式和语句
JavaScript中的表达式和语句是有区别的.
一个表达式会产生一个值,它可以放在任何需要一个值的地方,比如,作为一个函数调用的参数.下面的每行代码都是一个表达式:
myvar 3 + x myfunc("a", "b")
语句可以理解成一个行为.循环语句和if语句就是典型的语句.
一个程序是由一系列语句组成的.JavaScript中某些需要语句的地方,你可以使用一个 表达式来代替.这样的语句称之为表达式语句.
但反过来不可以:你不能在一个需要表达式的地方放一个语句.比如,一个if语句不能作为一个函数的参数.
6.2复合语句
用大括号括起来的一组javascript语句,就是复合语句;
例如
if( condition ) { //... }else { //... } for() { //... }
6.3 if 语句
只有当指定条件为 true 时或者能转化为true时,该语句才会执行代码。当指定条件为false时或者能转化为false时,该语句不会执行代码。
语句格式
if(expression){ statement }
if语句的第二种形式引入了else从句。
语句格式
if(expression){ statement1 }else{ statement2 }
当expression的值为false时,就执行else从句
当程序中有多个if时,要注意确保else从句匹配了正确的if语句。
i=j=1; k=2; if(i == j) if(j == k) document.write("i equals k;"); else document.write("i doesn't equals j;");
在这个例子中,内层的if语句构成了外层if语句的所需要的子语句,但是if和else如何普配就很混乱。
else的匹配规则:else总是与它距离最近的尚未配对的if配对
else语句与第二个if语句匹配
6.4 else if语句
语句格式
if(expression1){ statement1 }else if(expression2){ statement2 }
当expression1为false时,则会执行else if语句,当expression2为true,执行statement2,否则不执行。
6.5 switch case语句
switch case语句用于处理多分支结构的条件选择语句,又称开关语句
语句格式
switch(表达式) { case 常量表达式1: 语句1; break; case 常量表达式2: 语句2; break; …… case 常量表达式n: 语句n; break; default: 语句n+1; break; }
首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值 相等,就执行此case后面的语句,执行后遇break语句就退出switch语句;若圆括号中表达式的值与所有case后面的常量表达式都不等,则执行 default后面的语句n+1,然后退出switch语句,程序流程转向开关语句的下一个语句.
例如
switch(grade) { case 'A': /*注意,这里是冒号:并不是分号;*/ printf("85-100\n"); break; /*每一个case语句后都要跟一个break用来退出switch语句*/ case 'B': /*每一个case后的常量表达式必须是不同的值以保证分支的唯一性*/ printf("70-84\n"); break; case 'C': printf("60-69\n"); break; case 'D': printf("<60\n"); break; default: printf("error!\n"); }
6.6while语句
while为不确定性循环,当表达式的结果为真true
时,执行循环中的语句;表达式为假false
不执行循环。
语句格式
while(expression) statement
如果expression语句为true,将会无限次循环,不建议这样写,这样会导致浏览器崩溃
例如
while (1) { document.write("hello"); }
这个语句将会无限次输出hello,会导致浏览器崩溃;
6.7 do/while语句
do...while为不确定性循环,先执行大括号中的语句,当表达式的结果为真true
时,执行循环中的语句;表达式为假false
不执行循环,并退出do...while循环。
do{ statement1 }while (expression) { statement2 }
例如:计算1-100的所有整数之和(包括1与100)
var i=0; var iSum=0; do { iSum+=i; i++; }while(i<=100) document.write("1-100的所有数之和为"+iSum);
while与do...while的区别
- do...while将先执行一遍大括号中的语句,再判断表达式的真假。这是它与while的本质区别
- do...while与while是可以互相转化的
6.8 for循环
语句格式
for(初始化表达式;判断表达式;循环表达式) { 语句; }
说明 for语句非常灵活完全可以代替 while与 do...while语句。先执行"初始化表达式",再根据"判断表达式"的结果判断是否执行循环,当判断表达式为真true
时,执行循环中的语句,最后执行"循环表达式",并继续返回循环的开始进行新一轮的循环;表达式为假false
不执行循环,并退出for循环。
例如;计算1-100的所有整数之和(包括1与100)
for(var i=0,iSum=0;i<=100;i++) { iSum+=i; } document.write("1-100的所有数之和为"+iSum);
for语句使用中的注意事项
- 应该使用大括号
{}
包含多条语句(一条语句也最好使用大括号) - 初始化表达式可以包含多个表达式,循环表达式也可以包含多个表达式
6.9 for/in语句
for...in 语句用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。
for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。
语法
for (变量 in 对象) { code; }
“变量”用来指定变量,指定的变量可以是数组元素,也可以是对象的属性。
例子:使用 for ... in 循环遍历数组。
<script type="text/javascript"> var x var mycars = new Array() mycars[0] = "Saab" mycars[1] = "Volvo" mycars[2] = "BMW" for (x in mycars) { document.write(mycars[x] + "<br />") } </script>
6.10 break语句和continue语句
break 语句用于跳出循环。
continue 用于跳过循环中的一个迭代。
Break 语句
它用于跳出 switch() 语句。
break 语句可用于跳出循环。
break 语句跳出循环后,会继续执行该循环之后的代码(如果有的话):
实例
for (i=0;i<10;i++) { if (i==3) { break; } x=x + "The number is " + i + "<br>"; }
输出:
The number is 0 The number is 1 The number is 2
由于这个 if 语句只有一行代码,所以可以省略花括号:
for (i=0;i<10;i++) { if (i==3) break; x=x + "The number is " + i + "<br>"; }
Continue 语句
continue 语句中断循环中的迭代,如果出现了指定的条件,然后继续循环中的下一个迭代。
该例子跳过了值 3:
实例
for (i=0;i<=10;i++) { if (i==3) continue; x=x + "The number is " + i + "<br>"; }
输出:
The number is 0 The number is 1 The number is 2 The number is 4 The number is 5 The number is 6 The number is 7 The number is 8 The number is 9
6.11 var语句和return语句
var语句允许明确的声明一个或者多个变量。
语法如下
var name_1 [ = value_1] [ ,..., name_n [= value_n]]
关键字var之后跟随的是一个要声明的变量的列表,变量之间用逗号分隔。在这个列表中,每一个变量都可选地具有一个初始化表达式,用于指定它的初始值。
例如:
var i; var j = 0; var p,q; var greeting = "hello" + name; var x = 2.34, y = Math.cos(0.75) , r, theta;
6.13 function语句
function语句定义一个javascript函数。
语法如下
function functionname ([arg1 [, arg2 [,...[, argN]]]]) { statements }
参数
备注:使用 function 语句来声明一个以后要使用的函数。 在脚本的其他地方调用该函数前,不执行 statements 中包含的代码。JavaScript 对大小写敏感。关键词 function 必须是小写的,并且必须以与函数名称相同的大小写来调用函数。
6.13.1调用带参数的函数
在调用函数时,您可以向其传递值,这些值被称为参数。
这些参数可以在函数中使用。
您可以发送任意多的参数,由逗号 (,) 分隔:
myFunction(argument1,argument2)
当您声明函数时,请把参数作为变量来声明:
function myFunction(var1,var2) { 这里是要执行的代码 }
变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。
例子
<button onclick="myFunction('Bill Gates','CEO')">点击这里</button> <script> function myFunction(name,job) { alert("Welcome " + name + ", the " + job); } </script>
输出
Welcome Bill Gates,the CEO
6.13.2 带有返回值的函数
有时,我们会希望函数将值返回调用它的地方。
通过使用 return 语句就可以实现。
在使用 return 语句时,函数会停止执行,并返回指定的值。
语法
function myFunction() { var x=5; return x; }
上面的函数会返回值 5。
注释:整个 JavaScript 并不会停止执行,仅仅是函数。JavaScript 将继续执行代码,从调用函数的地方。
函数调用将被返回值取代:
var myVar=myFunction();
myVar 变量的值是 5,也就是函数 "myFunction()" 所返回的值。
即使不把它保存为变量,您也可以使用返回值:
document.getElementById("demo").innerHTML=myFunction();
"demo" 元素的 innerHTML 将成为 5,也就是函数 "myFunction()" 所返回的值。
您可以使返回值基于传递到函数中的参数:
实例
计算两个数字的乘积,并返回结果:
function myFunction(a,b) { return a*b; } document.getElementById("demo").innerHTML=myFunction(4,3);
"demo" 元素的 innerHTML 将是:
12
在您仅仅希望退出函数时 ,也可使用 return 语句。返回值是可选的:
function myFunction(a,b) { if (a>b) { return; } x=a+b }
如果 a 大于 b,则上面的代码将退出函数,并不会计算 a 和 b 的总和。
6.14 throw ,try/catch/finally语句
throw语句用来抛出一个异常(exception),通知程序发生了错误或者异常状况。catch语句将会捕获这个异常对其进行处理。
throw语句的语法如下
throw expression;
expression的值可以是任何类型的,但是通常是Error对象或者Error子类的一个实例。
来看个例子
function factorial(x){ if(x < 0 ) throw new Error("x must not be negative");//如果x小于0 ,将会抛出一个异常 for(var f = 1; x > 1; f *= x,x--); return f; }
异常抛出时,程序应该怎么执行呢;
你知道的,javascript是一种解释型语言(解释一句,执行一句)。异常抛出了,它告诉解释器,“你的程序出现异常啦”。接着,解释器就停止了程序的执行,赶紧找到最近的异常处理器。javascript中的try/catch/finally语句中的catch从句就是异常处理器。但是要是他没有catch从句怎么办,那就向上抛出异常,知道有个地方能够捕获它,处理它。
接下来,讨论 try/catch/finally语句
try/catch/finally语句就是javascript中的异常处理机制。
try块中是异常需要被处理的代码块,catch从句跟在try之后,他是try块某个地方发生异常时调用语句块;finally块跟在catch后面,存放清除代码,无论try发生了什么,finally都会被执行。
catch,finally是可选的,但是try块后至少要有一个catch,或者finally;
所以呢,try/catch/finally语句的语法如下
try{ tryStatements//必选项。可能发生错误的语句。 }catch(exception){ //必选项。任何变量名。exception 的初始化值是扔出的错误的值。 ; catchStatements//可选项。处理在相关联的 tryStatement 中发生的错误的语句。 }finally{ finallyStatements//可选项。在所有其他过程发生之后无条件执行的语句。 }
try{ tryStatements//必选项。可能发生错误的语句。 }finally{ finallyStatements//可选项。在所有其他过程发生之后无条件执行的语句。 }
try{ tryStatements//必选项。可能发生错误的语句。 }catch(exception){ //必选项。任何变量名。exception 的初始化值是扔出的错误的值。 ; catchStatements//可选项。处理在相关联的 tryStatement 中发生的错误的语句。 }
目前我们可能得到的系统异常主要包含以下6种:
- EvalError: raised when an error occurs executing code in eval_r()
- RangeError: raised when a numeric variable or parameter is outside of its valid range
- ReferenceError: raised when de-referencing an invalid reference
- SyntaxError: raised when a syntax error occurs while parsing code in eval_r()
- TypeError: raised when a variable or parameter is not a valid type
- URIError: raised when encodeURI() or decodeURI() are passed invalid parameters
上面的六种异常对象都继承自Error对象。他们都支持以下两种构造方法:
new Error(); new Error("异常信息");]
来看个实例
try { throw new Error("Whoops!"); } catch (e) { alert(e.name + ": " + e.message); }