1.for/in
语法如下:
for(variable in object)
statement
variable通常是一个变量名,也可以是一个可以产生左值的表达式或者一个通过var语句声明的变量,总之必须是一个适用于赋值表达式左侧的值。object是一个表达式,这个表达式的计算结果是一个对象。
执行for in语句的过程中,JS会先计算object表达式的值。
如果object是一个对象,JS会依次枚举对象的属性来执行循环。在每次循环之前,JS会先计算variable表达式的值,并将属性名(一个字符串)赋值给它。
如果表达式为null或者undefined,JS解释器会跳过循环并执行后续的代码。
variable的值可以当做赋值表达式的左值,它可以是任意表达式,每次循环都会计算这个表达式。例如,可以使用下面这段代码将所有对象的属性复制到一个数组中。
1 var p = {x:1, y:2, z:3}; 2 var a = [], i = 0; 3 for(a[i++] in p); <!-- empty --> 4 for(i in a) 5 console.log(i,a[i])
2.标签语句
语句是可以添加标签的,标签是由语句前的标识符和冒号组成:
identifier:statement
mainloop:while(token!=null){
continue mainloop;//跳转到下一次循环
}
通过给语句定义标签,就可以在程序的任何地方通过标签名引用这条语句。
break和continue是JavaScript中唯一可以使用语句标签的语句。
任何语句可以有很多个标签。
3.try/catch
在没有catch从句的情况下,try从句可以和finally从句一起使用。
我们无法完全精确地使用while循环来模拟for循环,因为continue语句在两个循环中的行为表现不一致。如果使用try/finally语句,就能使用while循环来正确模拟包含continue的for循环。
1 //模拟for(initialize;test;increment)body; 2 initialize; 3 while(test){ 4 try{body;} 5 finally{increment;} 6 }
需要注意的是,当body包含break语句时,while循环和for循环便有了更微妙的区别(造成了一次额外的自增运算)。
4.with语句
with 语句可以方便地用来引用某个特定对象中已有的属性,但是不能用来给对象添加属性。要给对象创建新的属性,必须明确地引用该对象。
语法格式
with(object instance)
{
//代码块
}
有时候,我在一个程序代码中,多次需要使用某对象的属性或方法,照以前的写法,都是通过:对象.属性或者对象.方法这样的方式来分别获得该对象的属性和方法,着实有点麻烦,学习了with语句后,可以通过类似如下的方式来实现:
with(objInstance)
{
var str = 属性1;
.....
} 去除了多次写对象名的麻烦。
1 <script language="javascript"> 2 <!-- 3 function Lakers() { 4 this.name = "kobe bryant"; 5 this.age = "28"; 6 this.gender = "boy"; 7 } 8 var people=new Lakers(); 9 with(people) 10 { 11 var str = "姓名: " + name + "<br>"; 12 str += "年龄:" + age + "<br>"; 13 str += "性别:" + gender; 14 document.write(str); 15 } 16 //--> 17 </script>
代码执行效果如下:
姓名: kobe bryant
年龄:28
性别:boy