React Native中if条件判断逻辑错误,输入1/2时误触发非法值告警
问题根源
你写的判断逻辑用了三个完全独立的if语句,没有形成互斥的分支链路:只有最后一个if绑定了else告警,前面两个if匹配成功后,代码不会停止执行,会继续往下走判断。
举个输入NumberPasses = '1'时的执行路径就能看明白:
- 第一个
if命中,给ctp赋值0.93 - 走到第二个独立
if,判断不等于'2',跳过 - 走到第三个独立
if,判断不等于'3',触发它绑定的else告警
只有输入值为'3'时,第三个if命中,才不会走对应的else,和你描述的运行现象完全吻合。
修改方案
把独立if改成互斥的分支结构,两种常用实现方式都可以:
方案1:使用else if分支链
var ctp if (NumberPasses === '1') { ctp = 0.93 } else if (NumberPasses === '2') { ctp = 0.90 } else if (NumberPasses === '3') { ctp = 0.85 } else { alert("Number of tube pass: Only 1, 2 or 3!") }
这种结构只要任意一个条件命中,就会直接跳过后续所有判断,只有所有合法值都不匹配时才会触发告警。
方案2:使用switch匹配
适合固定枚举值判断的场景,可读性更高:
var ctp switch (NumberPasses) { case '1': ctp = 0.93 break case '2': ctp = 0.90 break case '3': ctp = 0.85 break default: alert("Number of tube pass: Only 1, 2 or 3!") }
额外注意
如果你的NumberPasses有可能是数字类型(比如输入框直接拿到的是数字1而不是字符串'1'),目前用===严格相等判断会不匹配,可以把判断条件换成非严格相等==,或者先把值转成字符串再判断:String(NumberPasses) === '1'。
内容的提问来源于stack exchange,提问作者user15408272
相关产品推荐
相关产品推荐

