2011-05-24 87 views
133

选择1 - 切换使用回报:在JavaScript中,退出switch语句被认为是比使用break更好的做法吗?

function myFunction(opt) 
{ 
    switch (opt) 
    { 
     case 1: return "One"; 
     case 2: return "Two"; 
     case 3: return "Three"; 

     default: return ""; 
    }  
} 

选项2 - 开关用break:

function myFunction(opt) 
{ 
    var retVal = ""; 

    switch (opt) 
    { 
     case 1: 
      retVal = "One"; 
      break; 

     case 2: 
      retVal = "Two"; 
      break; 

     case 3: 
      retVal = "Three"; 
      break; 
    } 

    return retVal; 
} 

我知道,无论工作,而是多了一个最佳实践的?我倾向于喜欢选项1 - 使用最佳返回开关,因为它更干净,更简单。


Here is a jsFiddle of my specific example using the technique mentioned in @ic3b3rg's comments

var SFAIC = {}; 

SFAIC.common = 
{ 
    masterPages: 
    { 
     cs: "CS_", 
     cp: "CP_" 
    }, 

    contentPages: 
    { 
     cs: "CSContent_", 
     cp: "CPContent_"  
    } 
}; 

function getElementPrefix(page) 
{ 
    return (page in SFAIC.common.masterPages) 
     ? SFAIC.common.masterPages[page] 
     : (page in SFAIC.common.contentPages) 
      ? SFAIC.common.contentPages[page] 
      : undefined; 
} 

要调用的函数,我将在以下方面做到这一点:这里

getElementPrefix(SFAIC.common.masterPages.cs); 
getElementPrefix(SFAIC.common.masterPages.cp); 
getElementPrefix(SFAIC.common.contentPages.cs); 
getElementPrefix(SFAIC.common.contentPages.cp); 

问题是,它总是返回undefined。我猜测这是因为它传递的是对象字面值的实际值而不是属性值。我会如何解决这个问题,使用@ ic3b3rg的评论中描述的技术?

+2

+1好问题。我自己想过这个,虽然我知道它可以回归,但我不知道这是否是最佳做法。很想看看社区的想法。 – Eli 2011-05-24 18:04:00

回答

162

中断将允许您继续处理该功能。如果这是您想要在该功能中完成的所有操作,那么只需从开关中退出即可。

+3

因此,考虑到我的问题中的例子,答案是肯定的。但是,如果你有一个需要继续前进的功能,显然你会使用一个中断。 – 2011-05-24 17:15:09

+8

@Mark Costello的回答让我更多地感谢你的问题。我认为你正在寻找一个通用的“最佳实践”指南,但在你给出的具体例子中,最好的做法是“return {1:”One“,2:”Two,3:“Three”} [opt] ;'。如果你需要默认值,那么它会是'var o = {1:“One”,2:“2,3:”Three“}; return opt in o?o [opt]:“”;' – ic3b3rg 2011-05-24 17:36:16

+0

@ ic3b3rg - 我用我的具体例子编辑了我的问题,试图利用你的返回技巧(opt in o)? o [opt]:“”;',但在我的具体情况下它总是返回默认值。 – 2011-05-24 18:51:45

6

这取决于,如果你的函数只包含switch语句,那么我认为它很好。但是,如果您想在该功能中执行任何其他操作,则可能不是一个好主意。您现在可能还需要考虑您的要求,而不是将来。如果你想将你的功能从选项一改为选项二,那么需要进行更多的重构。

然而,鉴于if/else语句中是做了以下最佳实践:在此基础上

var foo = "bar"; 

if(foo == "bar") { 
    return 0; 
} 
else { 
    return 100; 
} 

,参数可以作出这种选择一个更好的做法。

简而言之,没有明确的答案,只要您的代码符合一致的,可读的,可维护的标准 - 也就是说不要在整个应用程序中混合和匹配选项1和2,那么这是最好的练习你应该跟着。

+2

该例中的最佳实践是'return foo ==“bar”;' – ic3b3rg 2011-05-24 17:31:35

+9

我很抱歉如果我讨厌你,但在这种情况下,我仍然会简化:'return foo ==“bar”? 0:100;'甚至'返回[100,0] [foo ==“bar”];'。 – ic3b3rg 2011-05-24 17:40:50

+3

@ ic3b3rg - 不应该是: 'return [100,0] [+(foo ==“bar”)]];' ? – Queue 2013-01-24 19:58:57

相关问题