从 switch 语句中返回是否被认为是比使用 break 更好的做法? [关闭]

问题描述 投票:0回答:3

选项 1 -

switch
使用
return

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

    default: return "";
  }    
}

选项 2 -

switch
使用
break

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

  switch (opt) {
    case 1: 
      retVal = "One";
      break;
    case 2: 
      retVal = "Two";
      break;
    case 3: 
      retVal = "Three";
      break;
  }

  return retVal;
}

我知道两者都有效,但最佳实践是另一种吗?我倾向于喜欢选项 1 -

switch
使用
return
最好,因为它更干净、更简单。


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

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

javascript return switch-statement break
3个回答
350
投票

中断将允许您继续在函数中处理。如果您只想在函数中执行此操作,那么只需返回开关就可以了。


37
投票

都不是,因为对于一个非常简单的任务来说,两者都非常冗长。 你可以这样做:

const result = ({
  1: 'One',
  2: 'Two',
  3: 'Three'
})[opt] ?? 'Default'  // opt can be 1, 2, 3 or anything (default)

当然,这也适用于字符串,两者的混合或没有默认大小写:

const result = ({
  first: 'One',
  'sec-ond': 'Two',
  3: 'Three'
})[opt]  // opt can be 'first', 'sec-ond' or 3

说明:

它通过创建一个对象来工作,其中选项/案例是键,结果是值。通过将选项放入括号中,您可以通过括号表示法访问与表达式匹配的键的值。

如果括号内的表达式不是有效键,则返回

undefined
。我们可以使用 nullish 合并运算符
??
检测这种未定义的情况,并返回默认值。

例子:

console.log('Using a valid case:', ({
  1: 'One',
  2: 'Two',
  3: 'Three'
})[1] ?? 'Default')

console.log('Using an invalid case/defaulting:', ({
  1: 'One',
  2: 'Two',
  3: 'Three'
})[7] ?? 'Default')
.as-console-wrapper {max-height: 100% !important;top: 0;}


10
投票

看情况,如果你的函数只有switch语句,那我觉得没问题。但是,如果您想在该函数内执行任何其他操作,这可能不是一个好主意。您可能还必须考虑现在和将来的需求。如果您想将功能从选项一更改为选项二,则需要进行更多重构。

但是,鉴于在 if/else 语句中,最佳做法是执行以下操作:

var foo = "bar";

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

基于此,可以论证选项一是更好的做法。

简而言之,没有明确的答案,所以只要你的代码遵循一致的、可读的、可维护的标准——也就是说不要在你的应用程序中混合和匹配选项一和选项二,这是你应该做的最佳实践跟随。

© www.soinside.com 2019 - 2024. All rights reserved.