JavaScript提供if结构和switch结构,完成条件判断。
(1)if 结构
if结构先判断一个表达式的布尔值,然后根据布尔值的真伪,执行不同的语句。
if (expression) statement
上面是if结构的基本形式。需要注意的是,expression(表达式)必须放在圆括号中,表示对表达式求值。如果结果为true,就执行紧跟在后面的statement(语句);如果结果为false,则跳过statement。
if (m === 3) m += 1;
上面代码表示,只有在m等于3时,才会将其值加上1。
这种写法要求statement只能有一个语句。如果想将多个语句放在statement之中,必须在if的条件判断之后,加上大括号。
if (m === 3) { m += 1; }
建议总是在if语句中使用大括号,因为这样方便插入语句。
(2)if...else结构
if代码块后面,还可以跟一个else代码块,表示括号中的表示式为false时,所要执行的代码。
if (m === 3) { // then } else { // else }
上面代码判断变量m是否等于3,如果等于就执行if代码块,否则执行else代码块。
对同一个变量进行多次判断时,多个if...else语句可以连写在一起。
if (m === 0) { // ... } else if (m === 1) { // ... } else if (m === 2) { // ... } else { // ... }
else代码块总是跟随离自己最近的那个if语句。
var m = 1; var n = 2; if (m !== 1) if (n === 2) console.log('hello'); else console.log('world');
上面代码不会有任何输出,else代码块也不会得到执行,因为它跟着的是最近的那个if语句,相当于下面这样。
if (m !== 1) { if (n === 2) { console.log('hello'); } else { console.log('world'); } }
如果想让else代码块跟随最上面的那个if语句,就要改变大括号的位置。
if (m !== 1) { if (n === 2) { console.log('hello'); } } else { console.log('world'); } // world
(3)switch结构
多个if...else连在一起使用的时候,可以转为使用更方便的switch结构。
switch (fruit) { case "banana": // ... break; case "apple": // ... break; default: // ... }
上面代码根据变量fruit的值,选择执行相应的case。如果所有case都不符合,则执行最后的default部分。需要注意的是,每个case代码块内部的break语句不能少,否则会接下去执行下一个case代码块,而不是跳出switch结构。
switch语句部分和case语句部分,都可以使用表达式。
switch(1 + 3) { case 2 + 2: f(); break; default: neverhappens(); }
上面代码的default部分,是永远不会执行到的。
需要注意的是,switch语句后面的表达式与case语句后面的表示式,在比较运行结果时,采用的是严格相等运算符(===),而不是相等运算符(==),这意味着比较时不会发生类型转换。
switch结构不利于代码重用,往往可以用对象形式重写。
var o = { banana: function (){ return }, apple: function (){ return }, default: function (){ return } }; if (o[fruit]){ o[fruit](); } else { o['default'](); }