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