抱歉这个愚蠢的问题。
如何在javascript switch-case语言元素中使用case的条件?
与下面的示例中一样,当变量liCount
为< = 5且> 0时,案例应匹配;但是,我的代码不起作用:
switch (liCount) {
case 0:
setLayoutState('start');
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
case (liCount<=5 && liCount>0):
setLayoutState('upload1Row');
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
case (liCount<=10 && liCount>5):
setLayoutState('upload2Rows');
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
case (liCount>10):
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
}
感谢您的任何建议!
答案 0 :(得分:205)
这有效:
switch (true) {
case liCount == 0:
setLayoutState('start');
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
case liCount<=5 && liCount>0:
setLayoutState('upload1Row');
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
case liCount<=10 && liCount>5:
setLayoutState('upload2Rows');
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
case liCount>10:
var api = $('#UploadList').data('jsp');
api.reinitialise();
break;
}
此答案的先前版本认为括号是罪魁祸首。事实上,括号在这里是无关紧要的 - 唯一必要的是switch(true){...}
和你的案例表达式来评估布尔值。
它有效,因为我们给开关的值用作比较的基础。因此,案例表达式,也评估布尔值将决定运行哪种情况。也可以转过来,并传递switch(false){..}
并将所需的表达式评估为false而不是true ..但个人更喜欢处理评估为真实性的条件。但是,它确实也有效,因此值得记住,了解它在做什么。
例如:如果liCount为3,则第一次比较为true === (liCount == 0)
,这意味着第一种情况为假。然后,交换机转到下一个案例true === (liCount<=5 && liCount>0)
。此表达式的计算结果为true,表示此情况已运行,并终止于break
。我在这里添加括号以使其更清晰,但它们是可选的,具体取决于表达式的复杂性。
它非常简单,并且处理一系列条件很简单(如果它符合你要做的事情),也许很长一段ìf() ... else if() ... else if () ...
可能会引入很多视觉噪音或脆弱性。
请谨慎使用,因为它是非标准模式,尽管它是有效的代码。
答案 1 :(得分:19)
你方式过于复杂。用if语句写它,就像这样:
if(liCount == 0)
setLayoutState('start');
else if(liCount<=5)
setLayoutState('upload1Row');
else if(liCount<=10)
setLayoutState('upload2Rows');
$('#UploadList').data('jsp').reinitialise();
或者,如果ChaosPandion尝试尽可能地优化:
setLayoutState(liCount == 0 ? 'start' :
liCount <= 5 ? 'upload1Row' :
liCount <= 10 ? 'upload2Rows' :
null);
$('#UploadList').data('jsp').reinitialise();
答案 2 :(得分:7)
请参阅下面的dmp's answer。如果可以的话,我会删除这个答案,但它被接受了,所以这是下一个最好的事情:)
你不能。 JS解释器要求您与switch语句进行比较(例如,没有“case when when”语句)。如果你真的想这样做,你可以制作 if(){ .. } else if(){ .. }
块。
答案 3 :(得分:7)
您想使用if语句:
if (liCount === 0) {
setLayoutState('start');
} else if (liCount <= 5) {
setLayoutState('upload1Row');
} else if (liCount <= 10) {
setLayoutState('upload2Rows');
}
$('#UploadList').data('jsp').reinitialise();
答案 4 :(得分:4)
如果这是您想要做的,那么最好使用if
语句。例如:
if(liCount == 0){
setLayoutState('start');
}
if(liCount<=5 && liCount>0){
setLayoutState('upload1Row');
}
if(liCount<=10 && liCount>5){
setLayoutState('upload2Rows');
}
var api = $('#UploadList').data('jsp');
api.reinitialise();
答案 5 :(得分:3)
这是您应该使用if
条款的情况。
答案 6 :(得分:3)
switch (true) {
case condition0:
...
break;
case condition1:
...
break;
}
只要条件返回正确的boolean
值,就可以在JavaScript中运行,但与else if
语句相比,它没有太多优势。
答案 7 :(得分:2)
您的代码无效,因为它没有按照您的预期执行操作。切换块接受一个值,并将每个大小写与给定值进行比较,寻找相等性。您的比较值是一个整数,但大多数案例表达式都会解析为布尔值。
所以,例如,说liCount = 2
。您的第一个案例将不匹配,因为2 != 0
。您的第二个案例(liCount<=5 && liCount>0)
评估为true
,但评估为2 != true
,因此这种情况也不会匹配。
出于这个原因,正如许多其他人所说,你应该使用一系列if...then...else if
块来做到这一点。
答案 8 :(得分:2)
如果可能的值是整数,则可以将案例捆绑起来。 否则,请使用ifs。
var api, tem;
switch(liCount){
case 0:
tem= 'start';
break;
case 1: case 2: case 3: case 4: case 5:
tem= 'upload1Row';
break;
case 6: case 7: case 8: case 9: case 10:
tem= 'upload2Rows';
break;
default:
break;
}
if(tem) setLayoutState((tem);
api= $('#UploadList').data('jsp');
api.reinitialise();
答案 9 :(得分:2)
您可以在 switch case 中使用 fall-through 方法。
const x = 'Welcome';
switch (x) {
case 'Come':
console.log(1)
break;
case 'Welcome':
case 'Wel':
case 'come':
console.log(2)
break;
case 'Wel':
console.log(3)
break;
default:
break;
}
> Result => 2
答案 10 :(得分:0)
请注意,我们不会将分数传递给交换机,但会传递给您。我们提供给该开关的值用作进行比较的基础。
下面的示例显示了如何在这种情况下添加条件:没有任何if语句。
function getGrade(score) {
let grade;
// Write your code here
switch(true) {
case score >= 0 && score <= 5:
grade = 'F';
break;
case score > 5 && score <= 10:
grade = 'E';
break;
case score > 10 && score <= 15:
grade = 'D';
break;
case score > 15 && score <= 20:
grade = 'C';
break;
case score > 20 && score <= 25:
grade = 'B';
break;
case score > 25 && score <= 30:
grade = 'A';
break;
}
return grade;
}
答案 11 :(得分:0)
尽管在OP的特定问题示例中,switch
是不合适的,但还是有一个示例,其中切换仍然是适当/有益的,但还需要其他评估表达式。这可以通过使用表达式的默认子句来实现:
switch (foo) {
case 'bar':
// do something
break;
case 'foo':
// do something
break;
... // other plain comparison cases
default:
if (foo.length > 16) {
// something specific
} else if (foo.length < 2) {
// maybe error
} else {
// default action for everything else
}
}
答案 12 :(得分:0)
如果你想在 switch 语句中传递任何值 然后在该传递值上应用条件和 评估语句然后你必须写开关 函数下的语句并在其中传递参数 函数,然后在 switch 表达式中传递 true,如 下面的例子。
function numberChecker(num){
let age;
switch(true){
case num >= 0 && num <= 10:
age = "Child";
break;
case num >= 10 && num <= 20:
age = "Teenager";
break;
case num >= 20 && num <= 30:
age = "Young";
break;
default:
age = "Undefined!! Enter Age Between 0 - 30";
break;
}
console.log("WOW You Are " + age);
}
numberChecker(15);