JavaScript if语句始终为true问题:日历开发中的条件判断异常
问题原因及修复方案
核心错误:赋值运算符替代了比较运算符
你代码里的if和else if条件使用的是单等号=(赋值操作),而不是用于判断相等的三等号===(严格相等)或者双等号==(松散相等)。
举个例子:
if(lastMonthDay = 31) { ... }
这行代码的作用是把31赋值给lastMonthDay,然后这个赋值表达式的返回值是31——在JavaScript的布尔判断中,非零数字会被判定为true,所以第一个if分支永远会被触发,不管你初始设置的lastMonthDay是多少,后面的else if和else分支根本不会执行。
修复后的代码片段
只需要把所有条件里的=替换成===即可:
// 修正后的条件判断部分 if(lastMonthDay === 31){ // 原31天月份的逻辑 } else if(lastMonthDay === 30){ // 原30天月份的逻辑 } else{ // 原其他情况(比如2月)的逻辑 }
额外建议
- 循环中的变量
i、n,还有newRow、newCell最好加上let或var声明,避免成为全局变量:for (let i = 0; i < 5; ++i){ let newRow = tbodyRef.insertRow(); for (let n = 0; n < 7; ++n){ let newCell = newRow.insertCell() // ... 后续逻辑 } } - 严格相等
===是推荐的比较方式,它不会进行自动类型转换,比==更安全,能避免很多潜在的类型错误。
内容的提问来源于stack exchange,提问作者user20065867
相关产品推荐
相关产品推荐

