您是不是需要在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中使用默认值[重复]的主要内容,如果未能解决你的问题,请参考以下文章