从switch语句中返回被认为是比使用break更好的做法
Is returning out of a switch statement considered a better practice than using break?
选项1-使用return
:的switch
function myFunction(opt) {
switch (opt) {
case 1: return "One";
case 2: return "Two";
case 3: return "Three";
default: return "";
}
}
选项2-使用break
的switch
:
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的注释中描述的技术,我该如何解决此问题?
中断将允许您继续处理函数。如果这就是你在函数中想要做的全部,那么从开关中返回就可以了。
两者都不是,因为对于一个非常简单的任务来说,两者都非常冗长您可以执行以下操作:
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
。我们可以通过使用零合并运算符??
来检测这种未定义的情况,并返回默认值。
示例:
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;}
这取决于,如果您的函数只由switch语句组成,那么我认为这很好。然而,如果您想在该函数中执行任何其他操作,这可能不是一个好主意。您可能还需要考虑您现在和将来的需求。如果您想将函数从选项一更改为选项二,则需要进行更多的重构。
然而,考虑到在if/else语句中,最好执行以下操作:
var foo = "bar";
if(foo == "bar") {
return 0;
}
else {
return 100;
}
基于此,可以提出选择一是更好的做法的论点。
简而言之,没有明确的答案,所以只要您的代码遵循一致、可读、可维护的标准——也就是说,不要在整个应用程序中混合和匹配选项一和选项二,这就是您应该遵循的最佳实践。
- 有没有更好的动手、具体的方法来学习Javascript
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 在JavaScript中拆分日期字符串的更好方法是什么
- 为什么$.brower被弃用?还有什么更好的替代方案
- 设置嵌套对象属性的更好方法
- 您有更好的动态方式来缩短复杂的代码jquery吗
- 用Javascript重新格式化复杂文本日期字符串的更好方法
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- 什么更好?使用iframe或jQuery之类的东西在外部网站中加载HTML文件
- 将数组从javascript格式化为php的更好方法,反之亦然
- jquery:将动画绑定到滚动条位置的更好方法
- 有更好的方法吗?(递归解析HTML unicode实体)
- 我应该如何将响应数据保存在对象(json)中以获得更好的操作和性能
- 有什么比document.execCommand更好的东西吗
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 编写if-else语句的更好方法
- 我能从“;输入“;事件是否有更好的方法来跟踪文本更改
- 从switch语句中返回被认为是比使用break更好的做法