是否可以在Javascript中将代码块分配给交换机案例两次?

时间:2015-08-16 20:27:16

标签: javascript coding-style switch-statement

我有一些Javascript处理表单以通过Ajax将结果发送到服务器,我想从代码中重用来处理某些问题类型的常见组件。假设我有两个问题类型“强制选择”和“强制选择与其他”,两者都使用单选按钮强制用户选择一个选项,但在第二种类型中,标有“其他”的单选按钮将允许它们将自己的答案输入问题框。获取单选按钮值在两者之间是常见的,但获取“其他”值则不会。是否可以接受

switch(questionType) {
    case 'Forced Choice':
    case 'Forced Choice with Other':
        //code to get radio button value
    case 'Forced Choice with Other':
        //if value was "other", get the value of the textbox
        break;
    default:
        break;
}

或者更喜欢说

switch(questionType) {
    case 'Forced Choice':
    case 'Forced Choice with Other':
        //code to get radio button value
        if(val == 'other' && questionType == 'Forced Choice with Other')
            //code to get "other" value
        break;
    default:
        break;
}

编辑:我只是想补充一些说明,在我的实际代码中,问题类型的区别并不像是否允许“其他”一样简单。我想使用相同的代码来获取所有基于单选按钮的问题的价值,并且有几种类型。对于某些人来说,它就像获取值一样简单,但对于其他人,我的脚本必须检查如何在表单的JSON配置文件中配置脚本。我想使用第一个模式来避免一些if语句都有2-3个条件。

您认为哪种模式更可取?为什么(如果第一种模式甚至可以正常运行)?

1 个答案:

答案 0 :(得分:2)

在Javascript中,与许多常见语言一样,切换案例会“掉到”下一个,除非使用break语句明确断开。这意味着,你的第一个例子就是工作,在技术上,但它是可怕的做法,非常混乱,以阅读和维护的(还,我不会感到惊讶,如果重复标签弄得有些口译或代码分析器)

最好只将常用功能提取到命名函数中。这将使您的代码最容易阅读和维护,并且重复将减少为两次调用相同的函数。

相关问题