JavaScript中racks_value变量值异常变更的问题求助
问题原因分析与解决方案
核心问题
你代码里的所有if条件都误用了赋值运算符=,而非用于比较的全等运算符===,这是导致racks_value被篡改的根本原因。
具体解释
racks_value = 1这个表达式的作用是把1赋值给racks_value,而非判断racks_value是否等于1。- 赋值表达式的返回值就是被赋予的值(比如
racks_value = 1返回1),而在JavaScript中,非零数值会被视为true,所以每一个if语句的条件都会成立,racks_value会被依次赋值为1、2、3……直到最后一个20,最终控制台输出20。 - 你提到改成
===后问题仍未解决,大概率是没有将所有if条件都替换成===,或者依然使用多个独立的if而非else if(不过就算用多个===的独立if,racks_value也不会被修改,只是会做多余的判断)。
修正方案
方案1:使用else if优化判断逻辑
将独立的if改为else if,这样匹配到第一个符合条件的分支后就会停止后续判断,同时用===做严格比较:
var racks_value = 2; console.log('racks value is ' + racks_value); var upfront_racks; if (racks_value === 1){ upfront_racks = 1000; } else if (racks_value === 2){ upfront_racks = 2000; } else if (racks_value === 3){ upfront_racks = 3000; } else if (racks_value === 4){ upfront_racks = 4000; } else if (racks_value === 5){ upfront_racks = 5000; } else if (racks_value === 6){ upfront_racks = 6000; } else if (racks_value === 7){ upfront_racks = 7000; } else if (racks_value === 8){ upfront_racks = 8000; } else if (racks_value === 9){ upfront_racks = 9000; } else if (racks_value === 10){ upfront_racks = 10000; } else if (racks_value === 11){ upfront_racks = 11000; } else if (racks_value === 12){ upfront_racks = 12000; } else if (racks_value === 13){ upfront_racks = 13000; } else if (racks_value === 14){ upfront_racks = 14000; } else if (racks_value === 15){ upfront_racks = 15000; } else if (racks_value === 16){ upfront_racks = 16000; } else if (racks_value === 17){ upfront_racks = 17000; } else if (racks_value === 18){ upfront_racks = 18000; } else if (racks_value === 19){ upfront_racks = 19000; } else if (racks_value === 20){ upfront_racks = 20000; } console.log('racks value is ' + racks_value); // 输出2
方案2:用对象映射简化代码(更推荐)
这种方式避免了大量的条件判断,代码更简洁易维护:
var racks_value = 2; console.log('racks value is ' + racks_value); // 建立racks值与upfront值的映射关系 var rackUpfrontMap = { 1: 1000, 2: 2000, 3: 3000, 4: 4000, 5: 5000, 6: 6000, 7: 7000, 8: 8000, 9: 9000, 10: 10000, 11: 11000, 12: 12000, 13: 13000, 14: 14000, 15: 15000, 16: 16000, 17: 17000, 18: 18000, 19: 19000, 20: 20000 }; // 根据racks_value获取对应的值,没有匹配项时设为0(可根据需求调整默认值) var upfront_racks = rackUpfrontMap[racks_value] || 0; console.log('racks value is ' + racks_value); // 输出2
内容的提问来源于stack exchange,提问作者Chuwa Feet
相关产品推荐
相关产品推荐

