在Javascript中切换语句

时间:2011-06-18 09:46:47

标签: javascript

任何人都可以帮助我吗?

这似乎不起作用:

switch (parseInt(charCode))
    {
        case (charCode >= 65 && charCode <=90): //UPPERCASE
            alert("UP");
        break;

        case (charCode >= 97 && charCode <=122): //LOWERCASE
            alert("LO");
        break;

        case (charCode >= 48 && charCode <=57): //NNUMBERS
            alert("NUM");
        break


    }

由于

5 个答案:

答案 0 :(得分:5)

案例必须是单个值,而不是表达式。如果您需要使用表达式,请使用if else if系列:

var numCharCode = parseInt(charCode, 10); // Always best to include the radix argument
if (numCharCode >= 65 && numCharCode <=90) {       //UPPERCASE
    alert("UP");
}
else if (numCharCode >= 97 && numCharCode <=122) { //LOWERCASE
    alert("LO");
}
else if (numCharCode >= 48 && numCharCode <=57) {  //NNUMBERS
    alert("NUM");
}

(总是假设charCode首先是一个字符串。这个名字表明它已经是一个数字了。)


偏离主题:您的逻辑以英语为中心(即使是英语,我们从其他语言复制的词语也是如此,例如“天真”)。如果那没关系,那很好,但如果没有,你会想要更多地了解如何以语言中立的方式可靠地确定角色的情况。这是StackOverflow上的More in this answer

答案 1 :(得分:1)

[编辑]让我们添加此免责声明:switch的使用被视为EVIL或ABUSIVE。 Javascript的一些门徒也考虑使用三元作为主要的SIN。所以要小心使用它们,因为hell可能等着你,所以福音就这样了。

你可以像这样使用switch 1

switch (true) {
   case (parseInt(charCode) >= 65 && parseInt(charCode) <=90): //UPPERCASE
       alert("UP");
       break;
   case (parseInt(charCode) >= 97 && parseInt(charCode) <=122): //LOWERCASE
       alert("LO");
       break;
   case (parseInt(charCode) >= 48 && parseInt(charCode) <=57): //NNUMBERS
       alert("NUM");
       break;
   default: break
}

它非常笨重。如果您从parseInt派生charCode,则不必使用event.keyCode。如果您需要使用parseInt,请不要忘记提供radix,或者更好的是,使用Number转换为数字。

无论如何使用ternary是替代方案:

alert( charCode >= 65 && charCode <= 90 
        ? 'UP'
        : charCode >= 97 && charCode <= 122
        ? 'LO'
        : charCode >= 48 && charCode <= 57 
        ? 'NUM'
        : 'OTHER'
);

[ 编辑 ]让我们看看以下替代方案是否可以满足Javascript Coders教会......

另一种方法是使用RegExp来自keyCode

的字符
var chr      = String.fromCharCode(charCode),
    alertval =    /[a-z]/.test(chr) ?  'LO'
                : /[A-Z]/.test(chr) ?  'UP'
                : /[0-9]/.test(chr) ?  'NUM'
                : 'OTHER';
    alert(alertval);

作为最后一种选择(男人,javascript是所以多才多艺!)我现在:

var check = String.fromCharCode(charCode)
             .replace(/([a-z])|([A-Z])|([0-9])|(.+)/,
                function(a,b,c,d) {
                  return b ? 'LO' : c ? 'UP' : d ? 'NUM' : 'OTH';
             });
关于'技巧'的

1 some notes

答案 2 :(得分:1)

你不应该认为关于Javascript的假设使用ASCII字符表(它不使用UTF8吗?),所以代替数值比较,只需使用字符(字符串)值比较。 你不应该以这样的方式使用switch语句:在你的例子中,它执行parseInt(charCode)(应该是一个整数)和布尔表达式值之间的(值和类型,“===”)比较由您的案例陈述返回。 使用和IF链,如下(假设charCode仍然是一个字符串值):

if (charCode >= 'A' && charCode <='Z') { //UPPERCASE
            alert("UP");
} else if (charCode >= 'a' && charCode <='z') { //LOWERCASE
            alert("LO");
        break;
} else if (charCode >= '0' && charCode <='9'): //NNUMBERS
            alert("NUM");
}

对于char的ASCII数值,使用Javascript“asc”函数,所以如果你的charcode来自一个键事件,你可以使用inverse,chr(keyCode)函数来获取一个字符串(字符) )已经数字键码的值。 我希望它有用:)

答案 3 :(得分:0)

这里不要使用switch - 语法不正确,charCode是一个int,所以不需要parseInt它

    if (charCode >= 65 && charCode <=90) //UPPERCASE
        alert("UP");
    else if (charCode >= 97 && charCode <=122) //LOWERCASE
        alert("LO");
    else if (charCode >= 48 && charCode <=57) // NUMBERS
        alert("NUM");

更新:怎么样 fromCharCode

var char = String.fromCharCode(charCode)

if (/[a-z]/.test(char)) alert("Lower");
else if (/[A-Z]/.test(char)) alert("Upper");
else if (/[0-9]/.test(char)) alert("Numbers");

http://jsfiddle.net/mplungjan/v65Xc/

我相信有人可以把它放在一个对象中或使用原型:)

答案 4 :(得分:0)

请访问此网站以获取与您的问题相关的功能和解释。对不起,他们都没有考虑到与'ï'或'ö'等非ascii字符有关的问题 http://javascript.about.com/library/blvalid02.htm