小编典典

javascript:在切换情况下使用条件

javascript

很抱歉那个愚蠢的问题。如何在javascript切换大小写语言元素中为案件使用条件?像下面的示例一样,当变量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;                  
}

感谢您的任何建议!


阅读 387

收藏
2020-05-01

共1个答案

小编典典

这有效:

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){...}您的case表达式必须为布尔值。

之所以起作用,是因为我们将给开关的值用作比较的依据。因此,同样对布尔值求值的case表达式将确定运行哪个case。也可以解决这个问题,传递switch(false){..}所需的表达式并将其评估为false而不是true
..但个人更喜欢处理评估为真实的条件。但是,它也确实起作用,因此值得牢记以了解它在做什么。

例如:如果liCount为3,则第一个比较为true === (liCount == 0),表示第一种情况为假。然后,开关继续进行下一种情况true === (liCount<=5 && liCount>0)。该表达式的计算结果为true,表示此情况已运行,并在处终止break。我在此处添加了括号以使其更清楚,但它们是可选的,具体取决于表达式的复杂性。

这很简单,并且以一种整洁的方式(如果它适合您要执行的操作)来处理一系列条件,其中一系列ìf() ... else if() ... else if () ...可能会引入大量视觉噪声或脆弱性。

请谨慎使用,因为尽管它是有效的代码,但它是非标准模式。

2020-05-01