JS中条件语句if-else、switch和循环语句while、do-while、for和C等其他编程语言相同,但是JS中循环语句多了一个for/in,它和常规的for循环完全不同,其语法如下:
for(variable in object)
statement
variable通常是一个变量名,也可以是一个可以产生左值的表达式或者一个通过var语句声明的变量,总之必须是一个适用于赋值表达式左侧的值。object是一个表达式,其计算结果是一个对象。statement是一个语句块,构成循环体。for/in循环适合遍历对象属性成员(它并不会遍历对象的所有属性,只有“可枚举”的属性才会遍历到,多数JS除了所有非继承的“自有”属性以外的继承属性都往往是可枚举的,而且按照它们定义的顺序进行枚举)。
JS中跳转语句break、continue和C等其他编程语言中的略有不同。在介绍其不同之前,先介绍标签语句。标签是由语句前的标识符和冒号组成:
identifier:statement
通过给语句定义标签,可以在程序的任何地方通过标签名引用这条语句。break和continue是JS中唯一可以使用语句标签的语句。一个语句标签不能和它内部的语句标签重名,但在两个代码段不相互嵌套的情况下是可以出现同名的语句标签的。任何语句可以有多个标签。
JS中允许break关键字后面跟随一个语句标签(只有标识符,没有冒号):
break labelname;
当break和标签一块使用时,程序将跳转到这个标签所标识的语句块的结束,或者直接终止这个闭合语句块的执行。当你希望通过break来跳出非就近的循环体或switch语句时,就会用到带标签的break语句,如下:
var matrix = GetTwoDimensionalArray();// 得到一个二维数组
var sum = 0, success = false;
compute_sum:if(matrix){
for(var x = 0; x < matrix.length; ++x){
var row = matrix[x];
if(!row){
break compute_sum;
}
for(var y = 0; y < row.length; ++y){
if(isNaN(row[y]){
break compute_sum;
}
sum += row[y];
}
}
success = true;
}
/* break语句跳转至此,如果在success == false的条件下到达这里,
说明二维数组中有错误,否则将数组中的元素进行求和
*/
注意,对于一条带标签的函数定义来说,不能从函数内部通过这个标签来跳转到函数外部。和break语句类似,带标签的continue语句可以用在嵌套的循环中,用以跳出多层次嵌套的循环体逻辑。C语言中goto语句也可以终止程序在某些深度嵌套的结构中的处理过程,但是和break标签语句还是有些区别的。