You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何一个三元表达式会抵消另一个?交通灯功能异常排查

问题根源与解决办法

问题出在橙灯的两次独立赋值逻辑:当sec处于26-29区间时,第一个三元语句会把橙灯设为橙色,但紧接着执行的第二个橙灯控制语句,因为sec >=54不成立,会触发else分支将橙灯重新设为黑色,直接覆盖了之前的正确设置。

解决思路

把橙灯的所有控制逻辑整合到一个条件判断中,确保优先级高的逻辑(26-29秒常亮)先被判断,只有当前面的条件不满足时,才会执行后续的闪烁逻辑,避免重复赋值覆盖。

修改后的代码

let time = new Date();
let sec = time.getSeconds();
const defaultSystem = setInterval(dispSecs, 1000);

function dispSecs() {
    console.log(sec);
    // 简化秒数更新逻辑
    sec = (sec + 1) % 60;

    // 绿灯控制
    greenLight.style.backgroundColor = sec < 26 ? 'green' : 'black';

    // 整合橙灯的所有控制逻辑,避免覆盖
    orangeLight.style.backgroundColor = 
        sec >= 26 && sec < 29 ? 'orange' :
        sec >= 54 && sec % 2 === 0 ? 'orange' :
        'black';

    // 红灯控制
    redLight.style.backgroundColor = sec >=29 && sec <54 ? 'red' : 'black';
}

额外优化点

  • 把sec++和sec ===60 ? sec=0 : sec简化成sec = (sec +1) %60,逻辑更清晰且不易出错。
  • 将每个灯的控制逻辑独立成块,可读性更强。

内容的提问来源于stack exchange,提问作者Steven Brooks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 18:25:18