? ? ? ? 前面我们学习了JavaScript中的变量、操作符等,本篇内容讲解JavaScript中的语句,只有了解了语句的使用,才能正式开发出一个完整的功能。
? ? ? ? if语句是实际开发中使用最多的语句之一,具体语法如下
if(条件) 语句1 else 语句2
? ? ? ? 其中条件可以是任意表达式,并且其返回的值不一定是布尔值,JavaScript会使用Boolean()函数将最终结果转化为布尔值。?如果条件为true则执行语句1,如果条件为false则执行语句2。这里的语句1和语句2可以是单行语句,也可以是多行语句。如果是多行语句,则需要使用大括号将所有语句括起来,如下所示
if(1==1){
console.log(1);
console.log(2);
}else{
console.log(3);
console.log(4);
}
? ? ? ? 不过,即使是单条语句,也推荐使用代码块的方式,即使用大括号将其括起来。
? ? ? ? do-while语句是后测试循环语句,即先执行循环体中的代码,后测试出口条件。也就是说,在do-while语句中,循环体中的代码至少被执行一次。以下是do-while语句的语法
do{
语句
}while(条件)
? ? ? ? ?下面举例说明
var i=10;
do{
console.log(i);
i--;
}while(i>1) //i大于1的情况下,循环体始终被执行
? ? ? ? 与do-while语句相反,while语句属于前测试循环语句,即先先测试出口条件,再执行循环体中的代码。?以下是while语句的语法
while(条件){
语句
}
?????????下面举例说明
var i=10;
while(i>1){
console.log(i);
i--;
} //i大于1的情况下,循环体始终被执行
? ? ? ? for语句也是前测试语句,它的特点是在执行循环之前可以声明变量,并且可以定义执行循环后要执行的代码。以下是for语句的语法
for(声明变量;条件;循环后执行的语句){
语句
}
????????下面举例说明
for(var i=10;i>1;i--){ //变量i在for语句中声明
console.log(i);
}
? ? ? ? 需要说明的是,虽然i是在循环内定义的变量,但在循环外也可以访问到它。
? ? ? ? for语句中的三个部分都是可选的,如果三个部分都省略,则会得到一个无限循环语句,如下所示
for(;;){
console.log(i);
}
? ? ? ? 也可以只给出控制表达式,将其变为while语句,例如
var i=10;
for(;i>1;){
console.log(i);
i--;
}
?????????for-in语句可以用来迭代对象属性,其语法如下
for(属性 in 对象){
语句
}
? ? ? ? 下面举例说明
var a={p1:1,p2:2};
for(key in a){
console.log(key) //第一次输出p1,第二次输出p2
}
? ? ? ? 需要注意的是,JavaScript中的对象属性没有顺序,因此,通过for-in语句循环出来的属性顺序是不可预测的,会因浏览器而异。并且,如果对象的值为null或undefined,for-in语句则不会执行。
? ? ? ? label语句用来在代码中添加标签。以便将来使用。label语句一般要与循环语句配合使用,具体用法在下面的小节讲解。
?????????break和continue语句用来在循环中控制循环的执行。break语句会立刻退出整体循环,并继续执行循环后面的语句。而continue语句则只是退出本次循环,并从循环顶部继续执行。比如下面的例子
for(i=0;i<10;i++){
console.log(i)
if(i>5){
break;
}
}
console.log('循环结束')
? ? ? ? 以上代码在连续输出0到6后,便退出循环,直接输出“循环结束”
for(i=0;i<10;i++){
if(i==5){
continue;
}
console.log(i)
}
console.log('循环结束')
? ? ? ? 以上代码从0到9依次输出,但唯独没有输出5,因为在循环体中当i等于5的时候退出了本次循环,又从头开始执行了。
? ? ? ? 我们再看一下break语句与label语句联合使用的情况,下面举例说明
var num=0;
start:
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if(i==5&&j==5){
break start;
}
num++;
}
}
console.log(num); //55
? ? ? ? 在以上代码中,如果两个循环正常执行的话,num的最终值是100。但内部循环的break后面跟了一个参数,表示要返回到的标签。添加这个标签的结果导致break语句不仅退出了内循环,还退出了外循环。因此,当变量i和j都等于5时,num的值刚好是55。
????????我们再看一下continue语句与label语句联合使用的情况,下面举例说明?
var num=0;
start:
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if(i==5&&j==5){
continue start;
}
num++;
}
}
console.log(num); //95
? ? ? ? ?以上代码中,continue会强制继续从最外层开始继续执行循环,这也意味着内部循环少执行了5次,因此num最终结果是95。
? ? ? ? 需要注意的是,在实际开发中并不推荐使用label标签,过度使用label标签会导致代码混乱,不利于调试。
? ? ? ? with语句的作用是将代码的作用域设置到一个特定对象中。目的是简化多次引用同一对象的代码,比如:
var a={
p1:1,
p2:2,
p3:3
};
with(a){
console.log(p1);
console.log(p2);
console.log(p3);
}
? ? ? ? 以上代码会依次输出1、2、3。
? ? ? ? 注意,由于大量使用with语句会造成性能下降,所以在实际开发中不建议使用with语句。
? ? ? ? switch语句是一种流控制语句,如下所示:
var a=1;
switch (a) {
case 1:
console.log(1);
break;
case 2:
console.log(2);
break;
case 3:
console.log(3);
break;
default:
console.log(4)
}
? ? ? ? 以上代码输出1,以上代码等同于以下if语句
var a=1;
if(a==1){
console.log(1);
}else if(a==2){
console.log(2);
}else if(a==3){
console.log(3);
}else{
console.log(4);
}
? ? ? ? switch语句还可以像下面这么用
var a=1;
switch (a) {
case 1:
case 2:
case 3:
console.log(3);
break;
default:
console.log(4)
}
? ? ? ? 以上语句等同于下面的if语句
var a=1;
if(a==1||a==2||a==3){
console.log(3);
}else{
console.log(4);
}