JavaScript中空值判断if语句异常:非空值无法进入代码块
问题分析与解决
这个if语句的核心错误是把逻辑或(||)误用成了逻辑与(&&),直接导致你的判断逻辑完全偏离预期。
为什么当前逻辑会异常?
你想要实现的应该是:只有当val1既不是null也不是空字符串,同时val2也既不是null也不是空字符串时,才进入代码块。但你用了||,这就导致每个括号里的条件永远为true——不管val1/val2是什么值:
- 假设val1是空字符串
'':val1 !== null为true,val1 !== ''为false,||只要有一个条件成立就返回true,所以整个括号结果是true; - 假设val1是
null:val1 !== null为false,val1 !== ''为true,||结果还是true; - 哪怕val1是正常非空值,两个条件都为true,
||自然也是true。
同理val2的判断也永远为true,所以整个if条件不管输入什么都会成立,这显然和你期望的“非空才进入”逻辑不符。
修正后的代码
把每个括号里的||换成&&,就能实现正确的“既不是null也不是空字符串”的判断:
// 情况1:两个值都非空 let val1 = 'category' let val2 = 'medical' if ((val1 !== null && val1 !== '') && (val2 !== null && val2 !== '')) { console.log(val1, val2); // 正常执行,输出 category medical } // 情况2:val1为空字符串,val2非空 let val1 = '' let val2 = 'medical' if ((val1 !== null && val1 !== '') && (val2 !== null && val2 !== '')) { console.log(val1, val2); // 不会执行,符合预期 }
简化写法(可选)
如果你的场景中,只需要排除null和空字符串'',不需要考虑0、false这类其他假值,还可以用更简洁的真值判断写法:
if (val1 && val2) { console.log(val1, val2); }
因为在JavaScript里,null和''都是假值,val1 && val2会在两个值都为真值时成立,效果和上面的完整判断一致,但代码更简洁。
内容的提问来源于stack exchange,提问作者Riley Christian
相关产品推荐
相关产品推荐

