Cod*_*ick 188 javascript return break switch-statement
选项1 - 使用return返回:
function myFunction(opt)
{
switch (opt)
{
case 1: return "One";
case 2: return "Two";
case 3: return "Three";
default: return "";
}
}
Run Code Online (Sandbox Code Playgroud)
选项2 - 使用break切换:
function myFunction(opt)
{
var retVal = "";
switch (opt)
{
case 1:
retVal = "One";
break;
case 2:
retVal = "Two";
break;
case 3:
retVal = "Three";
break;
}
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
我知道两者都有效,但又是一种最佳实践吗?我倾向于喜欢选项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;
}
Run Code Online (Sandbox Code Playgroud)
要调用该函数,我会通过以下方式执行此操作:
getElementPrefix(SFAIC.common.masterPages.cs);
getElementPrefix(SFAIC.common.masterPages.cp);
getElementPrefix(SFAIC.common.contentPages.cs);
getElementPrefix(SFAIC.common.contentPages.cp);
Run Code Online (Sandbox Code Playgroud)
这里的问题是它总是返回undefined.我猜这是因为它传递的是对象文字的实际值,而不是属性.我将如何使用@ ic3b3rg的评论中描述的技术来解决这个问题?
ic3*_*3rg 242
中断将允许您继续处理该功能.如果您想在功能中完成所有操作,只需返回开关即可.
leo*_*ess 11
两者都不是,因为对于一个非常简单的任务来说,两者都非常冗长。你可以这样做:
const result = ({
1: 'One',
2: 'Two',
3: 'Three'
})[opt] ?? 'Default' // opt can be 1, 2, 3 or anything (default)
Run Code Online (Sandbox Code Playgroud)
当然,这也适用于字符串,混合使用或不使用默认情况:
const result = ({
'first': 'One',
'second': 'Two',
3: 'Three'
})[opt] // opt can be 'first', 'second' or 3
Run Code Online (Sandbox Code Playgroud)
它通过创建一个对象来工作,其中选项/案例是键,结果是值。通过将选项放入括号中,您可以通过括号符号访问与表达式匹配的键的值。
这将返回undefined如果括号中的表达式是不是有效的关键。我们可以通过使用空合并运算符??来检测这种未定义的情况并返回一个默认值。
const result = ({
1: 'One',
2: 'Two',
3: 'Three'
})[opt] ?? 'Default' // opt can be 1, 2, 3 or anything (default)
Run Code Online (Sandbox Code Playgroud)
const result = ({
'first': 'One',
'second': 'Two',
3: 'Three'
})[opt] // opt can be 'first', 'second' or 3
Run Code Online (Sandbox Code Playgroud)
这取决于,如果你的函数只包含switch语句,那么我认为它很好.但是,如果要在该函数中执行任何其他操作,可能不是一个好主意.您也可能需要立即考虑您的要求,而不是将来.如果要将功能从选项1更改为选项2,则需要进行更多重构.
但是,鉴于在if/else语句中,最佳做法是执行以下操作:
var foo = "bar";
if(foo == "bar") {
return 0;
}
else {
return 100;
}
Run Code Online (Sandbox Code Playgroud)
基于此,可以认为选项一是更好的实践.
简而言之,没有明确的答案,所以只要您的代码遵循一致,可读,可维护的标准 - 也就是说不要在整个应用程序中混合和匹配选项一和二,这是您应该做的最佳实践以下.