Java脚本中的Switch语句

Switch Statement in Javascript

本文关键字:Switch 语句 脚本 Java      更新时间:2023-09-26

有人能帮我吗?

这似乎不起作用:

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

    }

感谢

事例必须是单个值,而不是表达式。如果需要使用表达式,请使用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。

[edit]让我们添加此免责声明:switch的使用被视为EVIL或ABUSIVE。Javascript的一些门徒也认为兄弟会的使用是一个主要的SIN。所以要小心使用它们,因为地狱可能在等着你,所以福音是这样说的。

您可以像这样使用switch1:

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
}

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

无论如何,使用三元是一种替代方法:

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

[edit]让我们看看下面的替代方案是否能满足Javascript程序员的要求。。。

另一种选择是使用具有源自keyCode:的字符的RegExp

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关于"技巧"的一些注意事项

关于Javascript的假设不应该使用ASCII字符表(它不是使用UTF8吗?),所以不应该使用数值比较,而应该使用字符(字符串)值比较。您不应该以这样的方式使用switch语句:在您的示例中,它在parseInt(charCode)(应该是整数)和布尔表达式值之间执行(value and type,"===")比较,例如case语句返回的值。使用和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");
}

对于字符的ASCII数值,请使用Javascript"asc"函数,因此,如果您的charcode来自密钥事件,则可以使用相反的chr(keyCode)函数来获得已具有数值的密钥代码的字符串(字符)值。我希望它有帮助:)

这里不要使用switch-这不是正确的语法,charCode是int,所以不需要解析int-it-

    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");

更新:怎么样来自CharCode

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/

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

请访问本网站了解与您的问题相关的功能和解释。很抱歉,它们都没有考虑到与"ï"或"ö"等非ascii字符相关的问题http://javascript.about.com/library/blvalid02.htm