JavaScript语句
语句(流控制语句)定义了JavaScript中的主要语法,语句通常使用一个或多个关键字
一、if语句
1.相关概念
- 语法:
if (condition) statement1 else statement2
condition
(条件)可以是任意表达式,而且对这个表达式的求值结果不一定是布尔值- JavaScript会自动调用
Boolean()
转换函数将这个表达式的结果转换为一个布尔值 - 如果
condition
的求值结果为true,则执行statement1
;否则,则执行statement2
- 而且这两个语句既可以是一行代码,也可以是一个代码块
if (condition1) statement1 else if (condition2) statement2 else statement3
2.示例
if(i>25){
alert("More than 25.");
}else if(i<0){
alert("Less than 0.");
}else{
alert("Between 0 and 25");
}
二、do-while语句
1.相关概念
do-while
语句是一种后测试循环语句,即只有在循环体中的代码块执行之后,才会测试出口条件- 在对条件表达式求值之前,循环体内的代码至少会被执行一次
- 语法:
2.示例
do{
statement
}while(expression);
var i=0;
do{
i +=2;
}while(i<10);
alert(i);
//只要变量i的值小于10,循环一直执行
三、while语句
1.相关概念
while
语句属于前测试循环语句- 在循环体内的代码被执行之前,就会对出口条件求值
- 循环体内的代码有可能永远不会被执行
- 语法:
while (expression) statement
2.示例
var i=0;
while(i<10){
i += 2;
}
//变量i开始时的值为0,每次循环都会递增2。只要i的值小于10,循环就会一直执行下去
四、for语句
1.相关概念
for
语句是一种前测试循环语句,在循环之前初始化变量和定义循环后执行代码块- 语法:
for (initialization;expression;post-loop-expression) statement
- 使用
while
循环做不到的,使用for
循环也做不到。for
循环只是把与循环有关的代码集中在了一个位置 - 在
for
循环的变量初始化表达式中,也可以不使用var
关键字。该变量的初始化可以在外部执行 - 由于JavaScript中不存在块级作用域,因此在循环内部定义的变量以可以在外部访问到
for
语句中的初始化表达式、控制表达式和循环后表达式都是可选的。将这三个表达式全部省略,就会创建一个无限循环。例如:
2.示例
for (;;){//无限循环
doSomething();
}
var count=10;
for(var i=0;o<count;i++){
alert(i);
}
alert(i);//10
//只给出控制表达式,实际上就把for循环转换成了while循环
var count=10;
var i=0;
for(;i<count;){
alert(i);
i++;
}
五、for-in语句
1.相关概念
for-in
语句是一种精准的迭代语句,可以用来枚举对象的属性- 语法:
for (property in expression) statement
- JavaScript对象的属性没有顺序。因此,通过
for-in
循环输出的属性名的顺序是不可预测的。顺序差别因游览器而异 - 如果表示要迭代的对象的变量值为
null
或undefined
,for-in
语句会抛出错误。ECMAScript5:对这种情况不抛出错误,而是不执行循环体。 - 为了保证最大限度的兼容性,建议在使用
for-in
循环之前,先确认该对象的值不是null
或undefined
2.示例
for (var propName in window){
document.write(propName);
}
//使用for-in循环显示BOM中的window对象的所有属性。每次执行循环时,都会将window对象中存在的一个属性名赋值给变量propName
//这个过程会一直持续到对象中的所有属性都枚举一遍为止
//与for语句类似,控制语句的var操作符不是必须的,但是为了保证使用局部变量,推荐使用
六、label语句
1.相关概念
- 使用
label
语句可以在代码中添加标签,以便将来使用 - 语法:
label: statement
2.示例
start: for(var i=0;i<count;i++){
alert(i);
}
//例子中定义的start标签可以在将来由break或continue语句引用。加标签的语句一般都要与for语句等循环语句配合使用
七、break和continue语句
1.相关概念
break
和continue
语句用于在循环中精确地控制代码的执行break
语句会立即退出循环,强制继续执行训话后面的语句continue
语句也是立即退出循环,但退出训话后会从循环的i顶部继续执行break
和continue
语句都可以与label语句联合使用,从而返回代码中特定的位置。这种联合使用的情况多发生在循环嵌套额情况下- 虽然连用
break
、continue
和label
语句能执行复杂的操作,但如果不使用过度,也会有问题 - 建议如果使用
label
语句,一定要使用描述性的标签,同时不要嵌套过多的循环
2.示例
var num=0;
for(var i=1;i<10;i++){
if(i%5==0){
break;
}
num++;
}
alert(num);//4
var num=0;
for(var i=1;i<10;i++){
if(i%5==0){
continue;
}
num++;
}
alert(num);//8
var num=0;
outermost:
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5&&j==5){
break outermost;
}
num++;
}
}
alert(num);//55
//outermost标签表示外部的for语句。内部循环break语句带了一个参数:要返回到额标签。添加这个标签的结果将导致break语句不仅会退出内部的for语句,而且以会退出外部的for语句。当变量i和j都等于5时,num的值正好是55
var num=0;
outermost:
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==5&&j==5){
continue outermost;
}
num++;
}
}
alert(num);//95
//continue语句会强制继续执行循环——退出内部循环,执行外部循环。当j是5时,continue语句执行,内部循环少执行5次,因此num的值为95
八、with语句
1.相关概念
with
语句的作用是将代码的作用域设置到一个特定的对象中- 语法:
with (expression) statement
- 定义
with
语句的目的主要是为了简化多次编写同一个对象的工作 - 严格模式下不循序使用
with
语句,否则将视为语法错误
var qs=location.search.substring(1);
var hostNmae=location.hostname;
var url=location.href;
2.示例
with(location){
var qs=search.substring(1);
var hostNmae=hostname;
var url=href;
}
//使用with语句关联了location对象。在with语句的代码块内部,每个变量首先被认为是一个局部变量,如果在局部变量的内部找不到该变量的定义,就会查询location对象中是否有同名的属性。如果发现了同名的属性,则以location对象属性的值作为变量的值
九、switch语句
1.相关概念
- 可以在
switch
语句中使用任何数据类型,无论是字符串,还是对象都可以 - 每个
case
的值不一定是常量,可以是变量,甚至是表达式 switch
语句在比较值时使用的是全等操作符,因此不会发生类型转换- 语法:
switch(expression){
case value:statement;break;
case value:statement;break;
case value:statement;break;
case value:statement;break;
default:statemnet;
}
//switch语句的每一种case的含义:如果表达式等于这个值(value),则执行后面的语句(statement)
//break关键字会导致代码执行流跳出switch语句。如果省略break关键字,就会导致执行完当前case后,继续执行下一个case
//default关键字则用于在表达式不匹配前面任何一种情况的时候,执行的代码
2.示例
switch(i){
case 25:alert("25");break;
case 35:alert("35");break;
case 45:alert("45");break;
default:alert("Other");
}
switch(i){
case 25:
//合并两种情形
case 35:alert("25 or 35");break;
case 45:alert("45");break;
default:alert("Other");
}
switch("hello world"){
case "hello"+"world":alert("Greeting was found");break;
case "goodbye":alert("Closing was found");break;
default:alert("Unexpected message was found");
}
var num=25;
switch(true){
case num<0:alert("Less than 0");break;
case num>0&&num<=10:alert("Between 0 and 10");break;
case num>10&&num<=20;alert(Between 10 and 20);break;
default:alert("More than 20");
}
//switch语句外面声明了一个变量num。之所以给switch语句传递表达式true,是因为每个case值都可以返回一个布尔值。每个case按照顺序被求值,直到找到匹配的值或者遇到default语句为止
源于整理《JavaScript高级程序设计》