ECMAScript-262规定了一组流控制语句,语句定义了ECMAScript中的主要语法,语句通常使用一或多个关键字来完成给定任务。
if语句
if语句的语法如下,
if (condition) statement1 else statement2
其中的condition(条件)可以是任意表达式,而且对这个表达式求值的结果不是一定是布尔值。ECMAScript会自动调用Boolean()转换函数将这个表达式的结果转换为一个boolean值。如果对condition求职的结果是true,则执行statement1(语句1),如果对condition求值的结果是false,则执行statement2(语句2)。
1 { 2 var i = 24; 3 if (i > 25) { 4 console.log('大于'); 5 } else { 6 console.log('小于'); 7 } 8 // 输出‘小于’ 9 }
如果是连续的判断,可以这样写,
if (condition1) statement1 else if (condition2) statement2 else statement3
do-while和while语句
do-while语句是一种后测试循环语句,即只有在循环体中的代码执行之后,才会测试出口条件,在对条件表达式求值之前,循环体内的代码至少会被执行一次;而while语句属于前测试循环语句,在循环体内的代码被执行之前,就会对出口条件求值,循环体内的代码有可能永远不会被执行。以下分别是两者的语法,
1 { 2 // do-while语法 3 do { 4 statement 5 } while (expression) 6 // while语法 7 while(expression) statement 8 }
for语句
for语句也是一种前测试循环语句,但它具有在执行循环之前初始化变量和定义循环后要执行的代码的能力。下面是for语句的语法,
for (initialization; expression; post-loop-expression) statement
1 { 2 var count = 10; 3 var i; 4 for (i = 0; i < count; i++) { 5 console.log(i); 6 } 7 }
for-in语句
for-in语句是一种精准的迭代语句,可以用来枚举对象的属性。语法如下,
for (property in experssion) statement
1 { 2 for (var propName in window) { 3 console.log(propName); 4 } 5 }
label语句
使用label语句可以在代码中添加标签,以便将来使用。语法如下,
label: statement
1 { 2 var count = 10; 3 var i; 4 first: for (i = 0; i < count; i++) { 5 console.log(i); 6 } 7 }
break和continue语句
break和continue语句用于在循环中精确地控制代码的执行。其中,break语句会立即退出循环,强制继续执行循环后面的语句。而continue语句虽然也是立即退出执行,但退出循环后会从循环的顶部继续执行。
1 { 2 var num = 0; 3 for (var i = 1; i < 10; i++) { 4 if(i % 5 == 0) { 5 break; 6 } 7 num++; 8 } 9 console.log(num)// 4 10 } 11 { 12 var num1 = 0; 13 for (var j = 1; j < 10; j++) { 14 if (i % 5 == 0) { 15 continue; 16 } 17 num1++; 18 } 19 console.log(num1);// 8 20 }
break和continue语句都可以与label语句联合使用,从而返回代码中特定的位置。这种联合使用的情况多发生在循环嵌套的情况下。
1 { 2 var num = 0; 3 outermost: 4 for (var i = 0; j < 10; i++) { 5 for (var j = 0; j < 10; j++) { 6 if (i == 5 && j == 5) { 7 break outermost; 8 } 9 num++; 10 } 11 } 12 console.log(num);// 55 13 }
with语句
with语句的作用是将代码的作用域设置到一个特定的对象中,定义with语句的目的主要是为了简化多次编写同一对象的工作,语法如下,
with (expression) statement;
1 { 2 // var qs = location.search.substring(1); 3 // var hostName = location.hostname; 4 // var url = location.href; 5 // 上面代码可以用with改良成 6 with (location) { 7 var qs = search.substring(1); 8 var hostName = hostname; 9 var url = href; 10 } 11 }
switch语句
switch语句是ECMAScript中普遍适用的一种流控制语句,语法如下,
1 { 2 switch (expression) { 3 case value: statement 4 break; 5 case value: statement 6 break; 7 case value: statement 8 break; 9 default: statement 10 } 11 }
switch语句中的每一种情形(case)的含义是:“如果表达式等于这个值(value),则执行后面的语句(statement)”。而break关键字会导致代码执行流跳出switch语句。如果省略break关键字,就会导致执行完当前的case后,继续执行下一个case。最后的default关键字则用于在表达式不匹配前面任何一种情况的时候,执行里面的代码。
ECMAScript的switch语句中可以使用任何数据类型,无论是字符串,还是对象的没有问题。其次,每个case的值不一定是常量,甚至是表达式。
1 { 2 switch (i) { 3 case 25: 4 alert('25'); 5 break; 6 case 35: 7 alert('35'); 8 break; 9 case 45: 10 alert('45'); 11 break; 12 default: 13 alert('other'); 14 } 15 }