将大小写切换为字符串

Switch case as string

本文关键字:字符串 大小写      更新时间:2023-09-26
$(document).ready(function(){
    createForm("text,password",".content");
});
function createForm(types,object){
    typ = types.split(',');
    
    //var source = "";
    
    $.each(typ,function(){
        switch(this) {
            case "text":
                console.log('text');
                break;
            default:
                console.log('default');
                break;
        }
    });
    //$(object).html(source);
}

我有一个控制台中的代码,它返回2xdefault。为什么?

我试图将每种类型的输入作为文本或密码返回,但我的开关无法识别";典型值";

您看到这种行为的原因是each调用中的thisString对象实例,而不是字符串基元。JavaScript两者兼而有之。在switch语句中,通过===与事例进行比较,并且字符串实例不是字符串原语===

三种修复方法:

  1. 如果您将开关更改为:

    switch (String(this)) {
    

    这将把它变成一个基元,然后switch就可以工作了。

  2. 正如VisioN在下面的评论中指出的那样,使用$.each传递的参数(每个字符串作为基元将作为第二个参数提供(:

    $.each(typ, function(index, value) {
        switch (value) {
            // ...
        }
    });
    
  3. 使用另一个答案中讨论的任何替代方案(其中一个是一个很好的简单for循环(。


旁注:不声明typ变量会让您成为隐式全局变量的恐怖的牺牲品。

jQuery在这里太夸张了,要想用jQuery正确地完成它,请查看T.J.Crowders的答案。

我推荐一种更简单的方法,使用标准的for循环。它运行良好:

var types = "text,password".split(",");
for (var i = 0; i < types.length; i++) {
    switch(types[i]){
        case "text":
            console.log('text');
        break;
        default: 
            console.log('default');
        break;
    }
}

您错误地使用了$.each函数。它应该是这样的:

$.each( typ, function( key, value ) {
    switch(value){
       case "text":
            console.log('text');break;
       default:
            console.log('default');break;
    }
});

尝试使用switch(String(this))而不是switch(this)。当然,初始化变量。