多条件判断未触发else分支,邮编匹配赋值始终返回AB求助
问题分析与解决方案
兄弟,我一眼就瞅出你代码里的俩关键问题,这就是为啥它总返回"AB"、else分支完全不执行的原因:
1. 赋值运算符误用(核心问题)
你写的判断条件是:
if (zipVal = 44030 || 44048 || 44082 || ...)
这里用了赋值运算符=,而不是用于比较的==或===。这行代码的执行逻辑是:
- 先计算
44030 || 44048 || ...,因为44030是“真值”,所以整个表达式结果就是44030 - 把44030赋值给
zipVal - 赋值操作的返回值就是44030,依然是真值,所以
if条件永远为true,自然只会走if里的逻辑,完全碰不到else分支
2. 逻辑或的写法错误(即使改了比较符也会踩坑)
就算你把=改成==,写成zipVal == 44030 || 44048这种形式也是错的。因为逻辑或||的左右两边都得是完整的比较表达式,正确的写法应该是:
if (zipVal == 44030 || zipVal == 44048 || zipVal == 44082 || ...)
不然第二个条件44048本身是真值,整个表达式还是永远为true,else分支依然不会执行。
优化后的代码方案
推荐用数组存储目标邮编,再用includes()方法判断,代码更简洁易维护,还能避免上述两个坑:
$('#salesforce_submit').change(function () { // 直接获取输入框的邮编值(返回的是字符串类型) const zipVal = $('#zip').val(); let zipAssign = ''; // 把所有对应AB的邮编存入数组(用字符串类型,和val()返回值类型匹配) const abZipList = [ '44030', '44048', '44082', '44003', '44093', '44076', '44062', '44021', '44046', '44099', '44032', '44047', '44010' // 这里可以继续添加其他邮编 ]; // 判断当前邮编是否在目标数组中 if (abZipList.includes(zipVal)) { zipAssign = 'AB'; } else { // 这里写else分支的逻辑,比如给zipAssign赋值其他值 zipAssign = '其他区域'; } // 后续可以在这里使用zipAssign变量 });
额外注意点:
- 因为
$('#zip').val()返回的是字符串,所以数组里的邮编也用字符串类型,避免类型不匹配的问题(比如'44030' === 44030会返回false) - 原来代码里的
var zipVal = '';完全没必要,直接赋值zipVal = $('#zip').val()就行,删掉冗余代码更清爽
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

