javascript - JavaScript If-else range check in 相反不起作用
问题描述
谁能解释一下这段代码背后的逻辑?
function getGrade(score) {
let grade;
if (20 < score <= 30) {
grade = "A";
} else if (10 < score <= 20) {
grade = "B";
} else if (0 < score <= 10) {
grade = "C";
}
return grade;
}
console.log(getGrade(15)); //'A'
console.log(getGrade(4)); //'A'
console.log(getGrade(20)); //'A'
使用&&
运算符 inif-else
或使用相反的 as:可以正常工作30>= score > 25
。提前致谢。
解决方案
20 < score <= 30
由于在 Javascript 中使用多个运算符时如何工作,表达式始终评估为 true,请在此处查看更多信息: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
发生的事情是首先被20 < score
评估,这是true
(1)或false
(0)。如果小于或等于 30,则比较该值。由于该值始终为 1 或 0,因此始终小于 30,因此整个表达式作为一个整体始终为真。
自己试试这些线,看看它是如何工作的。:)
score = 10;
b = 20 < score; // false
c = b <= 30; // always outputs true
// Also try
d = true <= 30; // true
e = false <= 30; // true
你应该在这里做的是,在你写的时候,使用 &&-operators 代替:
if (20 < score && score <= 30) {
grade = "A";
}
推荐阅读
- perl - Perl -M 找不到模块的硬编码路径
- sql - 是否有任何优化的方法来编写 SQL 查询来查找两个数据集之间的差异?
- c# - 是否可以像加载 XML 文件一样使用 XDocument 的功能加载 DGML 文件?
- ios - 有没有捷径可以知道,当我运行我的应用程序时,我在哪个视图控制器中?
- java - Leadtools.RasterException:本机库 Ltkrnx.dll 已加载到另一个类加载器中
- c# - 为什么你不能运行一个任务并用另一种方法捕获它
- sql - 在sql中转换时间
- c++ - 如何分别在R和C++中做两个矩阵的矩阵乘积
- sql - rexp_like - 似乎无法理解它是如何工作的
- javascript - 与服务器的连接不断失败连接 ETIMEDOUT 94.195.191.104:27017