三元运算符条件恒返回TRUE的原因及正确实现方案
问题根因
你的三元运算符没有写有效判断逻辑:
- 你直接把枚举成员
AssociatedItemType.ExRatedTag放在了三元运算符的条件位,缺失了「待判断的业务变量 === 目标枚举值」的核心比较步骤。 - 按照JS/TS的真值判定规则,只有
false、0、空字符串""、null、undefined、NaN会被转为false,其余所有值全为真值。如果ExRatedTag是数字枚举中值不为0的成员,或是字符串枚举的非空字符串成员,它本身作为判断条件永远为真,自然永远执行第一个分支的逻辑。 - 你测试的
const ? 1 : 2永远返回1也是同理:你直接把变量/常量本身放在条件位,只要这个值不属于上面列的6个假值,判断结果永远为真,根本不会走false分支。
修复方案
三元运算符的条件位必须是能得到布尔结果的比较表达式,你需要先找到代码里存储当前关联项类型的实际变量(下文用currentType代指,替换成你代码里的真实变量名即可),明确判断该变量是否匹配目标枚举值:
currentType === AssociatedItemType.ExRatedTag ? session?.data.reloadRow(ids) : this.reloadItemRows(this.prepareItemsIdentities(ids)!)
修改后执行逻辑完全符合预期:
- 判断结果为真(当前类型是ExRatedTag)时,执行
session?.data.reloadRow(ids) - 判断结果为假(当前类型不是ExRatedTag)时,执行
this.reloadItemRows(this.prepareItemsIdentities(ids)!)
内容的提问来源于stack exchange,提问作者GGotchaA
相关产品推荐
相关产品推荐

