将案例切换为字符串

时间:2013-02-16 13:19:36

标签: javascript

$(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);
}

我在控制台中有这个代码它返回2xdefaults。为什么呢?

我尝试将每种类型的输入作为文本或密码返回,但我的开关无法识别“typ”

4 个答案:

答案 0 :(得分:20)

您看到此行为的原因是this调用中的eachString对象实例,而不是字符串原语。 JavaScript都有。在switch语句中,与案例的比较是通过===,字符串实例不是===到字符串原语

解决问题的三种方法:

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

    switch (String(this)) {
    

    ...会将其变回原语,然后switch就可以了。

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

    $.each(typ, function(index, value) {
        switch (value) {
            // ...
        }
    });
    
  3. 使用the alternatives discussed in this other answer中的任何一个(其中一个是简单的for循环)。


  4. 旁注:你没有宣布typ变量,就会成为The Horror of Implicit Globals的牺牲品。

答案 1 :(得分:6)

jQuery在这里有点过分,因为使用jQuery正确的方法无论如何都要看看T.J.克劳斯回答。

我推荐使用标准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;
    }
}

答案 2 :(得分:4)

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

$.each( typ, function( key, value ) {
    switch(value){

       case "text":
            console.log('text');break;
       default:
            console.log('default');break;
    }
});

答案 3 :(得分:0)

尝试使用switch(String(this))代替switch(this)。当然,初始化变量。