### 语句 * if语句 * do-while语句 * while语句 * for语句 * for-of语句 * label语句 * break和continue语句 * with语句 * switch语句 * * * * * #### if语句 > if语句是编程中最常用的语句,下面就是一个if语句: ~~~ if( m=0 ){ console.log("语句1 ,如果m=0返回true,这里将被输出!") }else{ console.log("语句2 ,如果m=0返回false,这里将被输出!") } ~~~ > 其中 m=0 就是if语句中的条件,这个条件可以时任何表达式,而且表达式返回的结果不一定要求是boolean值,因为ECMAScript会自动调用Boolean()方法将这个表达式的结果转换为boolean值。如上所示,如果表达式返回值为true,语句1将被执行,如果表达式返回值为false,那么将执行语句2。 > 但在很多时候,我们需要满足多个条件,那可以通过在else后面再加上if语句,代码如下: ~~~ if( m=0 ){ console.log("语句1 ,如果m=0返回true,这里将被输出!") }else if( m=1 ){ console.log("语句2 ,如果m=1返回true,这里将被输出!") }else{ console.log("语句3 ,如果m=0和m=1都返回false,这里将被输出!") } ~~~ #### do-while语句 > do-while语句是一种测试循环语句,即只有在循环体中的代码执行后,才会测试出口条件。可理解为:在条件表达式求值之前,循环体内的代码至少执行一次,代码如下: ~~~ let i = 0 do { i++ }while(i<10); ~~~ > 上面例子中,只要变量i的值小于10,循环就会一只执行下去 #### while语句 > while语句属于前测试循环语句,与上面的do-while不同的是:在执行循环体内的代码之前就会对条件进行求值,然后再执行一次循环体的代码后,再次判断条件语句,直到条件语句被满足,代码如下: ~~~ let i =0 while(i<10){ i++ } //当i大于等于10的时候循环结束 ~~~ #### for语句 > for语句是一种前测试循环语句,但它具有执行循环之前初始化变量和定义循环后要执行的代码的能力,案例如下: ~~~ let c = 10 for(let i =0 ; i<c; i++){ console.log(i) // 依次输出 1,2,3,4,5,6,7,8,9 } ~~~ #### for-of语句 >for...of循环可以使用的范围包括数组、Set 和 Map 结构(进阶章节会讲到)、某些类似数组的对象,以及字符串。案例如下: ~~~ let iterable = [10, 20, 30]; for (let value of iterable) { console.log(value) // 依次输出: 10 ,20 ,30 } ~~~ > 上面的案例展示的是数组,同样,你可以把iterable替换为字符串或者对象来使用for...of来解析。 #### label语句 > 使用label语句可以在代码中添加标签,以供未来使用,案例如下: ~~~ hello : function(){ console.log("hello world") } ~~~ > javascript解释器在遇到label语句时并不会试着去执行它,等到你调用该label语句时才会被执行。 #### break和continue语句 > break和continue语句用于在循环中精准的控制代码的执行,其中,break语句会立即退出循环,强制执行后面的语句,而continue虽然也是立即退出循环,但是推出循环后会从循环顶部继续执行。案例如下: ~~~ let num =0 for(i=1;i<10;i++){ if(i%5=0){ break } num++ } console.log(num) // 4 let ber = 0 for(i=1;i<10;i++){ if(i%5=0){ continue } ber++ } console.log(ber) // 8 ~~~ #### with语句 > with语句的作用是将代码的作用域设置到一个特定的对象中,同时with语句也可以简化代码操作。案例如下: ~~~ let q = a.q let w = a.w let e = a.e let r = a.r //上面的代码都包含了localtion对象,使用with语句可以简化为下面的代码: with(a){ let q = q let w = w let e = e let r = r } //不过es6中新增了一种新的语法“解构”,可以更方便的分解操作对象/数组/字符串,在javascript进阶一章中有讲到 ~~~ #### switch语句 > switch语句与if语句对关系最为密切,而且也是在其他语言中普遍流行的一种控制语句,案例如下: ~~~ //在if判断语句中如果存在N多个判断条件,那么你的代码会像下面这样: if( i =1){ console.log(1) }else if (i=2){ console.log(2) }else if (i=3){ console.log(3) }else if (i=4){ console.log(4) }else if (i=5){ console.log(5) }else{ console.log(6) } ~~~ > 很明确的告诉你,这样做不仅代码难看,而且会影响javascript解释器执行效率,因为javascript解释器会去判断每一个条件,但是用switch()就可以解决这种问题,因为switch()语句会直接去寻找符合条件的case,然后执行这个case,不会像if语句那么呆板的去一个一个判断,如果找不到符合条件的case,那么将直接执行default,如下: ~~~ switch(i){ case 1: console.log(1) break case 2: console.log(2) break case 3: console.log(3) break case 4: console.log(4) break case 5: console.log(5) break default: console.log(1) } ~~~ > 如上所示,switch()语句中每一个case的含义是:如果表达式等于这个值,则执行执行后面的语句,执行完成后有一个break关键字跳出switch语句,如果省略break,接回导致执行完当前case后继续执行下一个case,直到遇见break或者所有代码执行完,最后的default关键字则用于表达式不匹配前面任何一种情形时执行,相当于一个else语句。 > 温馨提示:switch的判断表达式和case的匹配表达式可以是任何类型的值,甚至是null或者undefined,同时建议使用if语句时判断条件最多匹配两个,超过两个建议用使用switch