使用JavaScript根据doctor_id和assistant_id为NULL或空字符串设置HTML样式时始终显示红色背景的问题
问题排查:条件判断始终触发else分支的原因及修复方案
嘿,我一眼就瞅出你代码里的关键问题了,咱们一步步来拆解:
1. 核心bug:把赋值运算符当成了比较运算符
你写的这个判断条件:
if (v.doctor_id = 0 && v.assistant_id = 0) {
这里的=是赋值运算符,不是用来做比较的===(严格相等)或者==(松散相等)。这行代码会先把0赋值给v.doctor_id和v.assistant_id,然后整个表达式的结果是0——在JavaScript里,0属于“假值”,所以这个条件永远不会成立,自然每次都会走到else分支的红色背景。
2. 修复条件判断逻辑
把条件里的=改成===(推荐用严格相等,避免类型转换带来的意外):
if (v.doctor_id === 0 && v.assistant_id === 0) {
3. 优化初始赋值逻辑(可选但推荐)
你原来的赋值代码可以简化,用更简洁的方式处理空值/空字符串的情况:
// 准确匹配null和空字符串,转换为0 v.doctor_id = (v.doctor_id === null || v.doctor_id === "") ? 0 : v.doctor_id; v.assistant_id = (v.assistant_id === null || v.assistant_id === "") ? 0 : v.assistant_id; // 或者用逻辑或的短路求值(注意:如果值是0、false等假值也会被替换,你的场景刚好适用) v.doctor_id = v.doctor_id || 0; v.assistant_id = v.assistant_id || 0;
修复后的完整代码示例
// 处理空值/空字符串 v.doctor_id = (v.doctor_id === null || v.doctor_id === "") ? 0 : v.doctor_id; v.assistant_id = (v.assistant_id === null || v.assistant_id === "") ? 0 : v.assistant_id; ... // 正确的条件判断 if (v.doctor_id === 0 && v.assistant_id === 0) { html += '<td class="ci6 text-right" style="background-color: green;">' + $('.price').masked(v.app_price) + '</td>'; } else { html += '<td class="ci6 text-right" style="background-color: red;">' + $('.price').masked(v.app_price) + '</td>'; }
额外提醒
以后写条件判断的时候,一定要留意运算符:
=:用来给变量赋值===:严格比较值和类型是否都相等(推荐优先使用)==:松散比较,会自动做类型转换,容易出意外
这样修改后,当两个id都被转成0时,就会显示绿色背景,其他情况显示红色啦!
内容的提问来源于stack exchange,提问作者YvetteLee
相关产品推荐
相关产品推荐

