能否在if语句条件中省略重复变量进行区间范围判断?
问题解答
你的代码存在几处问题,先逐个说明:
- 逻辑表达式语法错误:
timeNow >= 0 && < 12这种写法不合法,&&两侧必须是完整的布尔表达式,正确写法是timeNow >= 0 && timeNow < 12 - 拼写错误:
else it应该是else if - 类型不匹配问题:
prompt()返回的是字符串,直接和数字比较会导致非预期结果,必须先转为数值类型
修正后的基础写法
let timeNow = Number(prompt("What time is it?")); if (timeNow >= 0 && timeNow < 12) { alert("good morning"); } else if (timeNow >= 12 && timeNow < 18) { // 把>12改为>=12,避免12点这个临界值无匹配 alert("good afternoon"); } else if (timeNow >= 18 && timeNow < 24) { alert("good evening"); } else { alert("请输入0-23之间的有效时间"); }
不使用多分支if-else的替代方案
方案1:用规则数组匹配
把时间区间和对应提示存入数组,通过遍历找到匹配项,逻辑更清晰,也方便后续扩展规则:
let timeNow = Number(prompt("What time is it?")); const timePeriods = [ { start: 0, end: 12, greeting: "good morning" }, { start: 12, end: 18, greeting: "good afternoon" }, { start: 18, end: 24, greeting: "good evening" } ]; const matchedPeriod = timePeriods.find(period => timeNow >= period.start && timeNow < period.end); matchedPeriod ? alert(matchedPeriod.greeting) : alert("请输入0-23之间的有效时间");
方案2:利用switch特性
switch的条件可以设为true,然后用case来匹配布尔表达式,实现类似多分支的效果:
let timeNow = Number(prompt("What time is it?")); switch (true) { case timeNow >= 0 && timeNow < 12: alert("good morning"); break; case timeNow >= 12 && timeNow < 18: alert("good afternoon"); break; case timeNow >= 18 && timeNow < 24: alert("good evening"); break; default: alert("请输入0-23之间的有效时间"); }
补充说明:JavaScript本身不支持变量 >=a && <b这种简化写法,必须写出完整的比较表达式。
内容的提问来源于stack exchange,提问作者SaBah
相关产品推荐
相关产品推荐

