JavaScript判断undefined值时条件判断仍异常触发问题排查
问题成因
你的判断逻辑存在两个核心问题,导致条件分支永远会被触发:
- 根因:
typeof运算符的返回值永远是字符串类型。当检测值为undefined时,typeof xxx返回的是字符串"undefined",而非原始值undefined。你写的typeof getValues('departmentId') !== undefined是拿字符串结果和原始类型的undefined做严格不等比较,这个表达式的返回值永远为true。由于你用的是或逻辑||连接判断条件,只要任意一个条件为真,整个if块就会执行,这就是实际值为undefined时代码依然进入分支的核心原因。 - 额外隐患:
String(xxx) != ""的非空判断逻辑存在误判风险:如果值为null,String(null)会得到字符串"null",不会被识别为空;如果值为0、false这类业务合法的假值,转字符串后也不是空串,会被误判为“存在有效值”。另外你在判断中重复调用了多次getValues,如果该函数有副作用、或者每次调用返回值不一致,还会引发额外的逻辑异常。

修正方案
- 修正typeof判断的写法:类型判断时要和字符串
"undefined"做比较,不要直接和原始值undefined比对 - 提前缓存
getValues的返回结果,避免重复调用函数 - 优化空值判断逻辑,同时覆盖undefined、null、空字符串场景,避免误伤0、false这类合法业务值
参考修正代码:
const departmentId = getValues('departmentId') const departmentDesc = getValues('departmentDesc') console.log("Value: " + typeof departmentId) // 任意一个字段为非空有效值时触发逻辑 if ( (departmentId != null && departmentId !== "") || (departmentDesc != null && departmentDesc !== "") ) { dispatch(setIsConfirm(true)) console.log("Clearing fields || Value: " + departmentId) }
代码中
!= null是JS常用简写写法,可以同时过滤null和undefined两种空值,等价于xxx !== null && xxx !== undefined。如果你的业务场景需要排除0、false这类假值,可以根据实际需求调整判断规则。
内容的提问来源于stack exchange,提问作者Dogeveloper
相关产品推荐
相关产品推荐

