JavaScript中的语句

一、switch语句

 

JavaScript允许case语句后跟任意的表达式,其中case的匹配用于===(等同于)进行匹配的,所以不能有类型的转换过程:

 

case 60*60*24:
case Math.PI:
case n+1:
case a[0]: 

 

如果未找着匹配的项,则执行标签为default的语句,default语句理论上可以放在switch中的任何位置,不过一般放在最后。

 

对比:在c、c++和java中,case表达式必须是编译时常量,因此效率比JavaScript中高。

 

二、for/in语句

 

for (variable in object)
   statement

 

其中:

  • variable:适用于赋值表达式左边的值:var语句、数组的一个元素或对象的一个属性
  •  object:对象名或者计算结果为对象的表达式
  • statement:循环主体

for/in循环的主体是对对象的每个属性执行一次,在循环前,对象的一个属性名会被作为字符串赋给变量variable,然后在循环体内可以用变量和"[]"运算符来查询该属性的值:

for ( var prop in my_object)
     document.write("name: "+prop+"; "+my_object[prop], "</br>");

 

一个简单、快捷的复制对象所有属性到数组的代码:

var o = {x:1, y:2, z:3};
var a = new Array();
var i = 0;
for(a[i++] in o);

 

三、continue语句

 

continue语句用于结束当前循环,开始执行下一次迭代。对于不同类型的循环语句意义不同:

  • 在while循环中,会再次检测开头的expression,如果值为true,则从头开始执行循环
  • 在do/while循环中,会跳到循环的底部,从顶部开始下次循环前,会先在此检测循环条件
  • 在for循环中,先计算increment的表达式,然后再检测test表达式以确定是否可以执行下一次迭代
  • 在for/in循环中,将以下一个赋给循环变量的属性名再次开始新的迭代

 注意:在while和for中的continue行为有不同:在while中先跳到循环条件处;在for中,先计算increment,然后再到循环条件处。因此在这两种循环中continue的语句行为有不同,所以用一个while循环来完全模拟一个for循环是不可能的。 

 

四、function

 

函数嵌套只能在函数顶层中出现,即不能出现在例如if、while等语句中。JavaScript中函数是在解析时发生,而不是在运行时。例如:

alert(f(4));             //16
var f = 0;               //覆盖f
function f(x){        //函数定义,在任何语句执行前
    return x*x;
}
alert(f);                 //f已经被覆盖,结果为0

 

五、throw语句

 

语法:throw expression;

其中expression可以是任何类型,通常是一个Error对象或者是Error的子类。例如:

function factorial(x){
     if(x<0) throw new Error("x must not be negative");
     for(var f = 1;x>1;f*=x,x++);
     return f;
}

使用try/catch/finally语句来捕捉异常,例如:

 

try{
  ....
}catch(ex){
  ...
}finally{
 ...

  

finally在最终跳转之前被执行,但是如果finally本身含有return、break、continue语句或throw语句转移控制流,或者调用了抛出异常的方法改变了控制流,那么等待的控制流转移将被舍弃,并进行新的转移。

 

六、with语句

 

在文章http://liugang594.iteye.com/blog/1523878,我们讨论了作用域链,用来解析变量名。with语句则是用于暂时修改作用域链。语法如下:

 

with(object)
    statement

 

这一语句用于将object添加到作用域链的头部,然后执行statement,再把作用域恢复到原始状态 。

 

实际应用时,with可以减少大量输入,例如要访问某个HTML表单元素:

               frames[i].document.forms[0].address.value

 

如果需要多次访问这个变量,则使用with语句可以简单的多:

 

with(frames[i].document.forms[0]){
           name.value = "";
           address.value = "";
           email.value = "";
}

 

不过不建议使用。缺点:

  • 难优化
  • 速度慢
  • 容易让人困惑

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值