javascript权威指南,第六章,语句

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
} 

参数

functionname

必需。 函数的名称。必须是一个标示符,不能是字符串或表达式

arg1...argN

可选。 函数理解的参数的可选的用逗号分隔的列表。

statements

可选。 一个或多个 JavaScript 语句。

备注:使用 function 语句来声明一个以后要使用的函数。 在脚本的其他地方调用该函数前,不执行 statements 中包含的代码。JavaScript 对大小写敏感。关键词 function 必须是小写的,并且必须以与函数名称相同的大小写来调用函数。

6.13.1调用带参数的函数

在调用函数时,您可以向其传递值,这些值被称为参数。

这些参数可以在函数中使用。

您可以发送任意多的参数,由逗号 (,) 分隔:

myFunction(argument1,argument2)

当您声明函数时,请把参数作为变量来声明:

function myFunction(var1,var2)
{
这里是要执行的代码
}

变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。

例子

<button οnclick="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);
}

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/huanhuan8808/archive/2013/05/09/3069974.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值