if(condition) statement1 else statement2
其中condition(条件),可以是任意表达式,而且对这个表达式求值的结果不一定是布尔值。
ECMScript会自动调用Boolean()转换函数将这个表达式的结果转换为一个布尔值
do-while语句是一种后测试循环语句,即在对条件表达式求值之前,循环体内的代码至少会被执行一次。
语法:
do{
statement
}while(expression;
while语句属于前测试循环语句,在循环体内的代码执行之前,就会对出口条件求值
语法:
while(expression) statement
for语句是一种前测试语句,但它具有在执行循环之前初始化变量和定义循环后要执行的代码的能力
使用while循环做不到的,使用for循环同样做不到,也就是说for循环只是把与循环有关的代码集中在了一个位置
由于ECMAScript中不存在会计作用域,因此在循环内部定义的变量在循坏外部依旧可以访问,例如:
var count=10;
for(var i=0;i
console.log(i);
}
alert(i) //10
在这个例子中,会有一个提示框显示循环完成后变量i的值,这个值是10.这是因为,即使i是在循环内部定义的一个变量,但在循环外部仍然可以访问到它。
for-in语句是一种精准的迭代语句,可以用来枚举对象的属性
语法:for(peoperty in expression)statement
示例:
for(var peopName in window){
document.write(propName);
}
在这个例子中,使用for-in循环遍历BOM中的window对象的所有属性。每次执行循环时,都会将window对象中存在的一个属性名赋值给变量propName。这个过程会一直持续到对象中的所有属性都被枚举一遍为止。与for循环类型,这里控制语句中的var操作符也不是必需的,但是,为了保证使用局部变量,推荐使用以上例子中的做法
ECMAScript中对象的属性没有顺序。因此,通过for-in循环输出的属性名的顺序是不可预测的。具体来讲,所有的属性都会被返回一次,但返回的先后次序可能会因浏览器而异
但是,如果所表示要迭代的对象是null或underfined,for-in语句会抛出错误,ECMAScript5更正了这一行为;对这种情况不再抛出错误,而只是不执行循环体为了保证最大限度的兼容性,建议在使用for-in循环之前,先检测确认该对象的值不是null或underfined
使用label语句可以在代码中添加标签,以便将来使用,
语法: label:statement
示例:
start:for(var i=0;i
alert(i);
}
这个例子中定义的start标签可以在将来由break或continue语句引用
加标签的语句一般都要与for语句等循环语句配合使用
break会立即退出循环,强制执行循环后面的语句
continue也会立即退出循环,但退出循环后会从循环的顶部继续执行
var num=0;
for(var i=1;i<10;i++){
if(i %5==0){
break;
}
num++;
}
alert(num); //4
这个例子中for循环会将变量i由0递增到10.在循环体内,有一个if语句检查i的值是否可以被5整除。如果是,则执行break语句退出循环。另一方面,变量num从0开始,记录循环执行的次数,在执行break语句后,要执行的下一行代码是alert(num)结果显示4。也就是说,在变量等于5时,num++总共执行了4次;而break语句的执行,导致了循环在num再次递增之前就退出了
var num=0;
for(var i=1;i<10;i++){
if(i %5==0){
continue;
}
num++;
}
alert(num); //8
当变量i等于5时,循环会在num再次递增之前退出,但接下来执行的是下一次循环,而不是alert(num);语句
with语句的作用是将代码的作用域设置到一个特定的对象中,语法如下:
with(expression)statement
定义with语句的目的主要是为了简化多次编写同一个对象的工作,如下面的例子所示
var qs=loacation.search.substring(1);
var hostName=location.hostname;
var url=location.href;
上面几行代码都包括location对象,如果使用with语句,可以把上面的代码改写成如下所示
with(loacation){
var qs=search.substring(1);
var hostName=hostname;
var url=href;
}
造这个重写后的例子中,使用with语句关联了location对象,这意味着在with语句的代码块内部,每个变量首先被认为是一个局部变量,而如果在局部环境中找不到该变量的定义,就会查询locaiton对象中是否有同名的属性、如果发现了同名属性,则以location对象属性的值作为变量的值
严格模式下不允许使用with语句,否则将被视为错误
虽然ECMAScript 中的switch语句借鉴自其他语言,但这个语句也有自己的特色。首先,可以在switch语句中使用任何数据类型(在很多其他语言中只能使用数值),无论字符串,还是对象都没有问题,其次每个case的值不一定是常量,可以是变量甚至是表达式