基本的JavaScript,如果给出意外的输出,则有多个其他
basic javascript , multiple else if giving unexpected output
function getRankForScore(score){
if(score <= 20) return 1;
else if(21 < score <=40) return 2;
else if(41 < score <=60) return 3;
else if(61 < score <=90) return 4;
else return 5;
}
getRankForScore(10)
//回报1
,预期
getRankForScore(22)
//返回2
,预期
但
getRankForScore(50 or any number > 21)
//返回2
.
如何使用开关大小写结构进行不等式检查之类的事情?上述功能有什么问题?
因为
当您输入大于 21 的数字时,条件21 < score
计算结果为 true 并返回 1,然后与 40 进行比较,这显然小于 40
如果以下情况下,您的语法在 else 中是错误的:
function getRankForScore(score){
if(score <= 20) return 1;
else if(score <= 40) return 2;
else if(score <= 60) return 3;
else if(score <= 90) return 4;
else return 5;
}
您可以在此处使用单行,使用短路评估:
function getRankForScore(score){
return score <= 20 && 1 || score <=40 && 2 ||
score <= 60 && 3 || score <=90 && 4 || 5;
}
a < b < c
不是你所期望的,它被解释为(a < b) < c
变成(例如)true < c
。
function getRankForScore(score) {
var result;
switch(true) {
case score <= 20:
result = 1;
break;
case score > 21 && score <= 40:
result = 2;
break;
case score > 41 && score <= 60:
result = 3;
break;
case score > 61 && score <= 90:
result = 4;
break;
default:
result = 5;
}
return result;
}
为什么不使用这样的代码:
function getRankForScore(score) {
if(score <= 20) {
return 1;
} else if(score > 21 && score <= 40) {
return 2;
} else if(score > 41 && score <= 60) {
return 3;
} else if(score > 61 && score <= 90) {
return 4;
} else {
return 5;
}
}
试试这个方式:
function getRankForScore(score){
if(score <= 20) return 1;
else if(score >21 && score <=40) return 2;
else if(score > 41 && score <=60) return 3;
else if(score> 61 && score <=90) return 4;
else return 5;
}
if (a < b < c)
的表达不是利格的。
这就是为什么:
function getRankForScore(score){
if(score <= 20) return 1;
else if(score > 21 && score <= 40) return 2;
else if(score > 41 && score <= 60) return 3;
else if(score > 62 && score <= 80) return 4;
else return 5;
}
alert(getRankForScore(42));
Javascript有时不是数学:(
你不能做 21 <分数><= 40,你必须使用 && 语句。分数>
在这里工作小提琴:http://jsfiddle.net/BaJse/
我认为
当你写这样的东西时:
if(21 < score <=40)
它实际上等于:
if (21 < score || score <= 40)
适合您的条件。 任何大于 21 的数字 - 这就是为什么它不会继续检查您的其他 if 语句的原因。
你应该做一个 AND 语句:
if (21 < score && score <= 40)
相关文章:
- 如何添加浮动和非浮动,其他
- 与其他库的jQuery.noConflict()
- 播放当前视频时如何停止其他视频?JavaScript
- 在JavaScript中输出转义字符
- 剑道UI内联编辑:如何在点击其他按钮时隐藏按钮
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- 如何在jQuery中将函数的输出分配给变量
- 除修剪外的其他功能
- 有没有一种方法可以捕获JavaScript控制台输出,以便我可以在其他地方引用它
- 如何将javascript ES6 repo编译输出导入其他repo
- 如果 java 脚本中的其他条件,则无法正确输出
- 基本的JavaScript,如果给出意外的输出,则有多个其他
- ajax/json输出必须是其他格式
- 粘贴或以其他方式在Electron应用程序之外输出文本
- 多个Ajax请求的结果,一个依赖于其他Ajax输出
- 按字母或其他属性分组javascript xml输出
- 无法重定向其他页面(HTML、Javascript)中的输出
- 如何在python BeautifulSoup或任何其他模块中获取javascript输出
- 用任何其他语言编写并输出到 JAVASCRIPT
- 使用Qunit和jsmockit(或其他框架?)进行Jquery单元测试,输出不像预期的那样工作