您是不是需要在switch语句JS中使用默认值[重复]

Posted

技术标签:

【中文标题】您是不是需要在switch语句JS中使用默认值[重复]【英文标题】:Do you need to use a default in switch statement JS [duplicate]您是否需要在switch语句JS中使用默认值[重复] 【发布时间】:2019-10-11 07:52:30 【问题描述】:

这是一个直截了当的问题,但在 switch 语句中可以不返回 default 状态吗?

switch 语句位于 React 组件中,如下所示。

const App = (chosenTeam) => 
    const renderSection = (team) => 
        switch (team) 
          case 'LFC':
            return <Liverpool />;
          case 'MUFC':
            return <TerribleTeam />;
          case 'Chelsea':
            return <Blues />;
        
    

    return renderSection(chosenTeam)

【问题讨论】:

没关系。没有,你会得到 undefined 作为函数的结果,如果这是你想要的值。 【参考方案1】:

不,这是可选的,请参阅switch on MDN

default 可选

默认子句;如果提供,则如果表达式的值与任何 case 子句都不匹配,则执行此子句。

无论如何,你应该使用字典对象而不是 switch:

const team = 
  LFC: <Liverpool />,
  MUFC: <TerribleTeam />,
  Chelsea: <Blues />
;

const App = chosenTeam => <>team[chosenTeam]</>;

主要方面是您获得了an object.的所有功能


注意,在组件主体内渲染组件可能会导致性能权衡(除非它们记忆):

const App = chosenTeam => 
  //         v Executed on *every* render
  const renderSection = team =>  ... ;

  return <>...</>;
;
//        v Should be in the outer scope if you keeping the function
const renderSection = team => 
  switch (team)  ... 
;

const App = chosenTeam => 
  return <>...</>;
;

【讨论】:

感谢@Dennis!你为什么会说字典而不是开关?就因为它更整洁? @peterflanagan 我会尝试添加关于对象的解释 关键是你得到了对象的所有功能,比如Object.entries,所以你可以映射它等等。【参考方案2】:

如果您知道切换的值将​​处于上述情况之一,那么不,默认情况是不必要的,因为它永远不会达到。

switch 在许多情况下可能容易出错并且不必要地冗长。您可以考虑使用按团队名称索引的对象:

const teams = 
  LFC: () => (<Liverpool />),
  MUFC: () => (<TerribleTeam />),
  Chelsea: () => (<Blues />)

const App = (chosenTeam) => 
  return teams[chosenTeam]()

【讨论】:

以上是关于您是不是需要在switch语句JS中使用默认值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在switch语句中选择一个值范围

具有多个默认值的Javascript Switch语句

js中switch语句中case值可不可以表示一个范围

switch case语句和if的区别

我想知道是不是可以在 json 文件中使用 switch 语句

在Switch语句中使用.StartsWith?