switch语句中的Javascript case语句

时间:2013-09-19 16:55:18

标签: javascript variables switch-statement case var

我在java脚本的'switch'语句中遇到'case'语句的问题。 我的问题是如何在'case'语句中编写多个数字并保存为每个数字编写多个命令的所有工作,我试着更好地解释自己。我想在案例陈述中写一下 10-14号(10,11,12,13,14)。 我该怎么写呢? 谢谢你的帮助,抱歉我的英语不好。

name = prompt("What's your name?")  
switch (name)  
{  
    case "Ori":  
        document.write("<h1>" + "Hello there Ori" + "<br>")  
        break;  

    case "Daniel":  
        document.write("<h1>" + "Hi, Daniel." + "<br>")  
        break;  

    case "Noa":  
        document.write("<h1>" + "Noa!" + "<br>")  
        break;  

    case "Tal":  
        document.write("<h1>" + "Hey, Tal!" + "<br>")  
        break;  

    default:  
        document.write("<h1>" + name + "<br>")  
}  
age = prompt ("What's your age?")
switch (age)
{
case  "10":
document.write("you are too little" + name)
break;

case "14":
document.write("So , you are in junior high school" + name)
break;

case  "18":
document.write("You are a grown man" + name)
break;

default:
document.write("That's cool" + name)
break;
}

5 个答案:

答案 0 :(得分:1)

查看此答案Switch on ranges of integers in JavaScript

总之,你可以这样做

var x = this.dealer;
switch (true) {
    case (x < 5):
        alert("less than five");
        break;
    case (x > 4 && x < 9):
        alert("between 5 and 8");
        break;
    case (x > 8 && x < 12):
        alert("between 9 and 11");
        break;
    default:
        alert("none");
        break;
}

但是那种方法违背了switch语句的目的,因为你可以链接if-else语句。或者你可以这样做:

switch(this.dealer) {
        case 1:
        case 2:
        case 3:
        case 4:
            // Do something.
            break;
        case 5:
        case 6:
        case 7:
        case 8:
            // Do something.
            break;
        default:
            break;
    }

答案 1 :(得分:0)

使用此功能,如果你不提供中断,则控制权将会下降,这样你就可以匹配交换机中的一组数字。

case 10:
case 11:
case 12:
case 14:
case 15: document.write("i am less than or equal to 15");break;

答案 2 :(得分:0)

假设您想要打开一个10-14(10,11,12,13,14)的数字,您可以将案例链接在一起:

switch(number) {
  case 10: 
  case 11: 
  case 12:
  case 13:
  case 14:
    alert("I'm between 10 and 14");
    break;
  default:
    alert("I'm not between 10 and 14");
    break;
}

答案 3 :(得分:0)

您可以简单地省略break;声明。

switch (2) {
    case 1: case 2: case 3:
        console.log('1 or 2 or 3');
        break;
    default:
        console.log('others');
        break;
}

我想稍微使用这个概念,我不推荐这种方法,但是你也可以依赖一个能为你创建控制流功能的函数。这只是允许一些语法糖。

var createCaseFlow = (function () {
    var rangeRx = /^(\d)-(\d)$/;

    function buildCases(item) {
        var match = item.match(rangeRx),
            n1, n2, cases;

        if (match) {
            n1 = parseInt(match[1], 10);
            n2 = parseInt(match[2], 10);
            cases = [];

            for (; n1 <= n2; n1++) {
                cases.push("case '" + n1 + "':");
            }

            return cases.join('');
        }

        return "case '" + item + "':";
    }

    return function (cases, defaultFn) {
        var fnStrings = ['switch (value.toString()) { '],
            k;

        for (k in cases) {
            if (cases.hasOwnProperty(k)) {
                fnStrings.push(k.split(',').map(buildCases).join('') + "return this[0]['" + k + "'](); break;");
            }
        }

        defaultFn && fnStrings.push('default: return this[1](); break;');

        return new Function('value', fnStrings.join('') + '}').bind(arguments);
    };

})();

var executeFlow = createCaseFlow({
        '2-9': function () {
            return '2 to 9';
        },
        '10,21,24': function () {
            return '10,21,24';
        }
    },
    function () {
        return 'default case';
    }
);

console.log(executeFlow(5)); //2 to 9
console.log(executeFlow(10)); //10,21,24
console.log(executeFlow(13)); //default case

答案 4 :(得分:-1)

您已经就如何完成这项工作获得了一些答案。但是,我想指出更多的事情。首先,个人而言,我不会使用开关/案例声明,因为有太多类似的案例 - 经典的if / elseif / else链在这里感觉更合适。

根据用例,您还可以提取一个函数,然后使用您的开关/案例(当然,名称和值更有意义):

function getCategory (number) {
    if(number > 20) {
        return 3;
    }
    if(number > 15) {
        return 2;
    }
    if(number > 8) {
        return 1;
    }

    return 0;
} 

switch( getCategory( someNumber ) ) {
    case 0:
        // someNumber is less than or equal to 8
        break;
    case 1:
        // someNumber is any of 9, 10, 11, 12, 13, 14, 15
        break;
    // ...
}

如果间隔间隔相等,您也可以这样做:

switch( Math.floor( someNumber / 5 ) ) {
    case 0:
        // someNumber is any one of 0, 1, 2, 3, 4
        break;
    case 1:
        // someNumber is any one of 5, 6, 7, 8, 9
        break;
    // ...
}

另外,应该注意的是,有些人认为转换/案例陈述有堕落(=遗漏break;陈述的情况)不良做法,尽管其他人觉得这很好。