将大小写切换为字符串

新手上路,请多包涵
$(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。为什么?

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

原文由 kraYz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 429
2 个回答

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

修复它的三种方法:

  1. 如果您将开关更改为:
    switch (String(this)) {

...这将把它变回原语,于是你的 `switch` 工作。
  1. 正如 VisioN 在下面的评论中指出的那样,使用 $.each 传递的参数(每个字符串 — 作为原始 — 将作为第二个参数提供):
    $.each(typ, function(index, value) {
       switch (value) {
           // ...
       }
   });

  1. 使用 其他答案中讨论的任何替代方案(其中一个是一个很好的简单 for 循环)。

旁注:您因未声明 typ 变量而陷入 隐式全局 变量的恐惧。

原文由 T.J. Crowder 发布,翻译遵循 CC BY-SA 3.0 许可协议

jQuery 在这里有点矫枉过正,无论如何,要以正确的方式使用 jQuery,请查看 TJ 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;
    }
}

原文由 TimWolla 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题