JS中if...else判断输入字符串时未返回false,执行错误分支是什么原因?
问题原因
你的代码有两个核心错误导致判断逻辑完全失效:
- 第一个错误:不能用
!=/==直接判断NaN
JS规范中明确规定,NaN和任何值做相等性(==、===)比较的结果永远为false,对应的不等性(!=、!==)比较结果永远为true。也就是说你写的f1 != NaN、f2 != NaN、nth != NaN这三个判断项,不管变量实际值是不是NaN,返回结果永远是true。
你可以在控制台运行以下代码验证:
5 != NaN // 结果是true NaN != NaN // 结果也是true
所以你原本的f1 != NaN || f2 != NaN || nth != NaN判断条件永远返回true,自然不管输入什么都会走if内的计算逻辑。
要正确判断一个值是不是NaN,必须使用JS内置的isNaN()函数或者Number.isNaN()方法:
isNaN(5) // 返回false isNaN(NaN) // 返回true
- 第二个错误:逻辑运算符和需求不匹配
你的预期是「三个输入全都是有效数字时才执行计算,只要有一个输入不是数字就弹出提示」,对应的判断逻辑需要同时满足三个值都不是NaN,所以应该使用&&(与)运算符,而不是||(或)运算符。
修正方案
只需要把if判断的条件替换为以下内容即可:
if (!isNaN(f1) && !isNaN(f2) && !isNaN(nth)) { // 保留原有计算逻辑 } else { alert("Please type in numbers.") }
内容的提问来源于stack exchange,提问作者WILLIAM MESSER
相关产品推荐
相关产品推荐

