本文深入讲解JavaScript中的条件分支结构,涵盖if、if-else及多分支if-else-if的语法与应用。通过购票函数示例,对比多个独立if与级联if的执行效率,并详细介绍switch-case结构的用法、break关键字的重要性及default处理逻辑,帮助开发者写出高效且清晰的代码。
条件分支基础与场景模拟
大家好,接续之前的内容,前文已简要介绍运算符,今天的重点在于逻辑条件分支与循环结构。首先,我们通过一个常见的“买票”场景来模拟逻辑处理:不同身份的人票价不同,但购票行为一致。我们可以将这一行为封装为一个名为BuyTicket的函数。
//代码
function BuyTicket(){
console.log("请付款200元");
}
观察上述函数体,会发现其存在缺陷。当用户身份为学生或军人时,该函数无法应用相应的折扣,导致逻辑不适用。若仅通过增加多个独立函数来解决,代码将变得冗余。为此,JavaScript提供了分支语句,能更优雅地处理此类问题。接下来,我们查看修改后的代码实现。
function BuyTicket(identity){
if(identity == "学生"){
console.log("请付款100元");
}
if(identity == "军人"){
console.log("请付款150元");
}
if(identity == "普通人"){
console.log("请付款200元");
}
}
//模拟3种人去买票
BuyTicket("学生");
BuyTicket("军人");
BuyTicket("普通人");

这种写法显然比前一种更为科学,后续我们将逐步优化,让大家逐渐体会程序设计的精妙之处。
if分支语法详解
通过上述示例,我们可以看出该函数解决了基本的分支问题。现在,我们来详细讲解if分支的语法结构。
if(条件){
//执行语句
}
条件表达式通常包括非空对象、非undefined对象、布尔值true、非0数字以及所有字符串。在函数体中,我们常使用==比较符运算后得到布尔值进行判断,这是一种常见方式。当然,也可以使用其他类型的值作为条件,请参考下图以加深理解。

A处:所有条件均成立,因此都打印出“执行了”;B处:条件均不符合if的合格值,故未执行。注:此处使用的是显式值,实际开发中常使用运算后的返回值,如前文BuyTicket函数中的==运算。若返回true则执行,返回false则不执行。每次调用BuyTicket时,传入的值通常只符合一个条件。
完整if分支结构
接下来,我们学习完整的if分支结构。
//第一种,两个分支
if(条件){
//执行
}else{
//执行
}
直接参考图示,一目了然。

A处:执行了前置代码;B处条件不合格,因此执行else块内的语句。逻辑简单,不再赘述。
双分支情况中,始终会执行二者之一,绝不会同时执行两个分支。
//第二种,多个分支
if(条件){
//执行
}else if(条件){
//执行
}else if(条件){
//执行
}…else if(条件){
//执行
}else{
//执行
}
多分支情况下,始终只执行其中一个分支。一旦某个分支条件匹配并执行,后续条件将不再比较,这是一种高效的执行方式。若单纯使用多个独立的if块(如前文BuyTicket函数),效率较低,因为每个if都会进行条件比较。因此,我们可以对BuyTicket函数进行改造。
//代码
funciton BuyTicket(identity){
if("学生"){
console.log("请付款100元");
}else if("军人"){
console.log("请付款150元");
}else{
console.log("请付款200元");
}
}
switch结构体与代码优化
这种写法更为科学,执行效果与前文一致。其优势在于执行效率更高:条件逐一匹配,一旦合格即执行,不再匹配其他条件块。相比前文代码,这种写法更为优秀。此外,还有一种多分支的替代写法,即switch结构体,我们先来看其语法。
switch(表达式){
case 常量表达式1:
//执行
break;
case 常量表达式1:
//执行
break;
case 常量表达式1:
//执行
break;
default:
//执行
break;
}
执行过程自上而下:用表达式与下方的常量表达式逐个匹配,若匹配成功,则执行对应语句。注意,在每个case块后需添加break关键字,否则将依次执行后续case块中的语句,直到遇到break为止。利用这一特性,在适当情况下我们也可以省略break关键字。现在,我们使用switch结构体重新修改前文的BuyTicket函数。
function BuyTicket(identity){
switch(identity){
case "学生":
console.log("请付款100元");
break;
case "军人":
console.log("请付款150元");
break;
case "普通人":
console.log("请付款200元");
break;
default:
console.log("请出示身份证");
}
}
default块用于处理表达式均未匹配的情况,默认执行该块代码。由于它是最后一个代码块,因此也可以省略break关键字。

总结今日内容,主要讲解了条件分支相关的知识,包括if、if-else、if-else if-else以及switch语句。受篇幅限制,每日仅能更新一定内容。下一篇将介绍循环结构,请大家先消化今日内容,我们下一篇继续。