JavaScript中为何需搭配使用逻辑运算符与比较运算符?
两种条件判断写法的差异说明
核心结论
这两种写法在JavaScript等绝大多数类C语法的编程语言中运行效果完全不同,讲师使用的第一种写法才是能正确实现「判断totalMark处于[0,40)区间」逻辑的正确写法。
第二种写法的运行逻辑错误原因
JavaScript中的比较运算符属于左结合运算符,你写的0 <= totalMark < 40会按照如下顺序执行:
- 先计算左侧比较表达式
0 <= totalMark,返回布尔值true或false - 再将第一步得到的布尔值和40做比较,即执行
true < 40或者false < 40 - 布尔值参与数值比较时会被隐式转换为数字:
true转1,false转0,因此不管第一步的结果是什么,1 < 40和0 < 40的结果都是true
也就是说,第二种写法的判断条件永远为真,哪怕totalMark是-10或者100,都会进入分支将成绩设为F,完全不符合业务逻辑。
两种写法的优劣对比
- 第一种写法(拆分比较+逻辑与连接)
if (totalMark >= 0 && totalMark < 40) { finalGrade = "F"; document.getElementById("final_grade").value = finalGrade; }- 优势:逻辑完全符合区间判断的预期,在Java、C++、C#、JavaScript等所有类C语法的编程语言中通用,代码可读性高,其他开发者可以快速理解判断逻辑
- 劣势:需要重复书写一次变量名,代码长度稍长
- 第二种写法(连写比较)
if (0 <= totalMark < 40) { finalGrade = "F"; document.getElementById("final_grade").value = finalGrade; }- 优势:写法和数学中的区间表达习惯一致,代码更简洁
- 劣势:仅在Python等极少数支持连写比较语法的编程语言中能正常运行,在绝大多数主流编程语言中逻辑完全错误,通用性极差,容易产生极难排查的隐蔽逻辑Bug
内容的提问来源于stack exchange,提问作者Aragorn
相关产品推荐
相关产品推荐

