其中的 condition(条件)可以是任意表达式;而且对这个表达式求值的结果不一定是布尔值。
- if (condition) statement1 else statement2
运行一下
- if (i > 25) alert("Greater than 25."); // 单行语句
- else {
- alert("Less than or equal to 25."); // 代码块中的语句
- }
但我们推荐的做法则是像下面这样:
- if (condition1) statement1 else if (condition2) statement2 else statement3
运行一下
- if (i > 25) {
- alert("Greater than 25.");
- } else if (i < 0) {
- alert("Less than 0.");
- } else {
- alert("Between 0 and 25, inclusive.");
- }
下面是一个示例:
- do {
- statement
- } while (expression);
运行一下
- var i = 0;
- do {
- i += 2;
- } while (i < 10);
- alert(i);
下面是一个示例:
- while(expression) statement
运行一下
- var i = 0;
- while (i < 10) {
- i += 2;
- }
下面是一个示例:
- for (initialization; expression; post-loop-expression) statement
运行一下
- var count = 10;
- for (var i = 0; i < count; i++){
- alert(i);
- }
使用 while 循环做不到的,使用 for 循环同样也做不到。也就是说, for 循环只是把与循环有关的代码集中在了一个位置。
- var count = 10;
- var i = 0;
- while (i < count){
- alert(i);
- i++;
- }
运行一下
- var count = 10;
- var i;
- for (i = 0; i < count; i++){
- alert(i);
- }
运行一下
- var count = 10;
- for (var i = 0; i < count; i++){
- alert(i);
- }
- alert(i); //10
而只给出控制表达式实际上就把 for 循环转换成了 while 循环,例如:
- for (;;) { // 无限循环
- doSomething();
- }
运行一下
- var count = 10;
- var i = 0;
- for (; i < count; ){
- alert(i);
- i++;
- }
下面是一个示例:
- for (property in expression) statement
运行一下
- for (var propName in window) {
- document.write(propName);
- }
下面是一个示例:
- label: statement
这个例子中定义的 start 标签可以在将来由 break 或 continue 语句引用。加标签的语句一般都要与 for 语句等循环语句配合使用。
- start: for (var i=0; i < count; i++) {
- alert(i);
- }
运行一下
- 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
运行一下
- 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
定义 with 语句的目的主要是为了简化多次编写同一个对象的工作,如下面的例子所示:
- with (expression) statement;
上面几行代码都包含 location 对象。如果使用 with 语句,可以把上面的代码改写成如下所示:
- var qs = location.search.substring(1);
- var hostName = location.hostname;
- var url = location.href;
运行一下
- with(location){
- var qs = search.substring(1);
- var hostName = hostname;
- var url = href;
- }
switch 语句中的每一种情形(case)的含义是:“如果表达式等于这个值(value),则执行后面的语句(statement)”。而 break 关键字会导致代码执行流跳出 switch 语句。如果省略 break 关键字,就会导致执行完当前 case 后,继续执行下一个 case。最后的 default 关键字则用于在表达式不匹配前面任何一种情形的时候,执行机动代码(因此,也相当于一个 else 语句)。
- switch (expression) {
- case value:
- statement
- break;
- case value:
- statement
- break;
- case value:
- statement
- break;
- case value:
- statement
- break;
- default:
- statement
- }
而与此等价的 switch 语句如下所示:
- if (i == 25){
- alert("25");
- } else if (i == 35) {
- alert("35");
- } else if (i == 45) {
- alert("45");
- } else {
- alert("Other");
- }
运行一下
- 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.");
- }