程序不能只会从上往下跑,还得看情况选路。用商城会员折扣这个真实例子,把三种 if 一次练透。
就像"如果下雨,就带伞"——条件成立才行动,不成立就当没这回事。这就是只有一条路的单分支。
let stock = 12; // 库存数量
let warnNum = 20; // 预警线
if (stock < warnNum) { // 如果库存比预警线还少
console.log("【警告】库存不足,请及时补货"); // 就执行这句
}
// 库存够的话,上面这句根本不跑,直接跳过
像"如果及格就表扬,否则就批评"——两个结果里必选一个。
if (stock < warnNum) {
console.log("库存不足,请补货"); // 条件成立走这
} else {
console.log("库存正常"); // 不成立走这
}
如果有好几种情况(比如会员分四档),就用 if...else if 一个接一个。规则是从上往下挨个问,问中一个就执行、然后整个结束,后面的不再问。
let level = 2; // 会员等级:0普通 1白银 2黄金 3钻石
let originPrice = 200; // 原价
let discount = 1; // 折扣,先默认不打折(1=原价)
if (level === 0) {
discount = 1; // 普通:不打折
} else if (level === 1) {
discount = 0.95; // 白银:95折
} else if (level === 2) {
discount = 0.9; // 黄金:9折
} else if (level === 3) {
discount = 0.8; // 钻石:8折
}
let pay = originPrice * discount; // 折后价 = 原价 × 折扣
console.log("等级" + level + ",折后价" + pay);
如果你把多分支的顺序写反(比如先问"是不是会员"再问"是不是钻石"),可能一上来就被前面宽泛的条件接住,后面精确的分支永远轮不到。所以条件要从上往下,从具体到一般。作业让你换 level=0/1/3 分别试,就是练这个。
① 可能在什么地方用:会员等级打折;成绩分段评级;库存低于预警线告警。
② 常见的问题:多分支顺序写反,宽泛条件先把精确分支接住了,后面永远走不到。
③ 解决思路:条件从窄到宽、从具体到一般排;写之前先在注释里画个流程图。