javascript基础知识(7) 条件判断
JavaScript使用if () { ... } else { ... }
来进行条件判断。例如,根据年龄显示不同内容,可以用if
语句实现如下:
var age = 20; if (age >= 18) { // 如果age >= 18为true,则执行if语句块 alert('adult'); } else { // 否则执行else语句块 alert('teenager'); }
其中else
语句是可选的。如果语句块只包含一条语句,那么可以省略{}
:
var age = 20; if (age >= 18) alert('adult'); else alert('teenager');
省略{}
的危险之处在于,如果后来想添加一些语句,却忘了写{}
,就改变了if...else...
的语义,例如:
var age = 20; if (age >= 18) alert('adult'); else console.log('age < 18'); // 添加一行日志 alert('teenager'); // <- 这行语句已经不在else的控制范围了
上述代码的else
子句实际上只负责执行console.log('age < 18');
,原有的alert('teenager');
已经不属于if...else...
的控制范围了,它每次都会执行。
这就是为什么我们建议永远都要写上{}
。
多行条件判断
如果还要更细致地判断条件,可以使用多个if...else...
的组合:
var age = 3; if (age >= 18) { alert('adult'); } else if (age >= 6) { alert('teenager'); } else { alert('kid'); }
上述多个if...else...
的组合实际上相当于两层if...else...
:
var age = 3; if (age >= 18) { alert('adult'); } else { if (age >= 6) { alert('teenager'); } else { alert('kid'); } }
但是我们通常把else if
连写在一起,来增加可读性。这里的else
略掉了{}
是没有问题的,因为它只包含一个if
语句。注意最后一个单独的else
不要略掉{}
。
请注意,if...else...
语句的执行特点是二选一,在多个if...else...
语句中,如果某个条件成立,则后续就不再继续判断了。
如果if
的条件判断语句结果不是true
或false
怎么办?例如:
var s = '123'; if (s.length) { // 条件计算结果为3 // }
JavaScript把null
、undefined
、0
、NaN
和空字符串''
视为false
,其他值一概视为true
,因此上述代码条件判断的结果是true
。
switch
switch 语句用于基于不同的条件来执行不同的动作。
switch(n) { case 1: 执行代码块 1 break; case 2: 执行代码块 2 break; default: 与 case 1 和 case 2 不同时执行的代码 }
工作原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。请使用 break 来阻止代码自动地向下一个 case 运行。
显示今天的星期名称。请注意 Sunday=0, Monday=1, Tuesday=2, 等等:
var d=new Date().getDay(); switch (d) { case 0:x="今天是星期日"; break; case 1:x="今天是星期一"; break; case 2:x="今天是星期二"; break; case 3:x="今天是星期三"; break; case 4:x="今天是星期四"; break; case 5:x="今天是星期五"; break; case 6:x="今天是星期六"; break; }
default 关键词
请使用 default 关键词来规定匹配不存在时做的事情:
如果今天不是星期六或星期日,则会输出默认的消息:
var d=new Date().getDay(); switch (d) { case 6:x="今天是星期六"; break; case 0:x="今天是星期日"; break; default: x="期待周末"; } document.getElementById("demo").innerHTML=x;