JavaScript ES5环境下数组null判断的if条件不生效问题求解
问题原因及修复方案
核心错误点
- 逻辑运算符使用错误:你当前的if条件用了
||(逻辑或),只要任意一个判断成立,整个条件就会返回true。当_OFNBRLst为null时,_OFNBRLst !== undefined这个条件首先成立,所以if判断永远通过,永远不会进入else分支。 - 无效冗余判断:
String.prototype.match()匹配不到结果时返回的是原始值null,不是字符串"null",也不是空字符串"",所以这两个判断完全没有作用。 - 调试输出的误解:你在日志里看到的
"null"是null和字符串拼接时,JS自动做类型转换得到的字符串,变量本身的值是原始值null,不是字符串类型。
修复方案
把if条件替换为以下任意一种写法即可:
写法1(最简洁,ES5兼容)
利用== null会同时匹配null和undefined的特性,反向判断即可:
// 只有当_OFNBRLst既不是null也不是undefined的时候,才进入if分支 if (_OFNBRLst != null) { // 原有正常流程代码 } else { // 空值处理代码 }
写法2(严格判断,可读性更高)
如果要写严格不等的判断,必须用&&(逻辑与)连接所有条件:
if (_OFNBRLst !== undefined && _OFNBRLst !== null) { // 原有正常流程代码 } else { // 空值处理代码 }
效果验证
当你用测试值1(空字符串)运行修复后的代码时,_OFNBRLst为null,会进入else分支,输出IS NULL的日志;用测试值2运行时,_OFNBRLst是匹配到的数组,会进入正常if分支,和预期逻辑完全一致。
内容的提问来源于stack exchange,提问作者M SW
相关产品推荐
相关产品推荐

