在JavaScript中,是否从switch语句返回被认为比使用break更好的做法?

选项1 – 使用返回开关:

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

选项2 – 使用中断切换:

 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 – 切换使用最好的,因为它更干净,更简单。


这里是我使用@ ic3b3rg的评论中提到的技术的具体例子的jsFiddle

 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的注释中描述的技术来解决这个问题?

rest会让你继续处理的function。 如果这是你想要在function中完成的话,只要从开关中退出就没有问题。

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

但是,如果在if / else语句中,最好的做法是执行以下操作:

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

基于此,可以说select一个更好的做法。

总之,没有明确的答案,所以只要你的代码遵循一致的,可读的,可维护的标准 – 也就是说不要在你的应用程序中混合和匹配选项1和2,这是你应该的最佳实践以下。