关闭。这个问题是基于意见的。它目前不接受答案。想改进这个问题?更新问题,以便可以通过编辑这篇文章用事实和引用来回答它。 7 个月前关闭。社区在 7 个月前审查了是否重新打开此问题并将其关闭:基于意见 更新问题,以便可以通过编辑此帖子以事实和引用来回答它。改进这个问题
选项 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;
}
我知道两者都有效,但又是一种最佳实践吗?我倾向于最喜欢使用 return
的选项 1 - switch
,因为它更干净、更简单。
Here is a jsFiddle of my specific example using the technique mentioned in @ic3b3rg's comments:
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);
这里的问题是它总是返回未定义的。我猜这是因为它传递的是对象文字的实际值而不是属性。我将如何使用@ic3b3rg 评论中描述的技术来解决这个问题?
中断将允许您继续在函数中处理。如果您只想在函数中执行此操作,只需退出开关即可。
两者都不是,因为对于一个非常简单的任务来说,两者都非常冗长。你可以这样做:
const result = ({
1: 'One',
2: 'Two',
3: 'Three'
})[opt] ?? 'Default' // opt can be 1, 2, 3 or anything (default)
当然,这也适用于字符串,两者的混合或没有默认情况:
const result = ({
'first': 'One',
'second': 'Two',
3: 'Three'
})[opt] // opt can be 'first', 'second' or 3
解释:
它通过创建一个对象来工作,其中选项/案例是键,结果是值。通过将选项放入括号中,您可以通过括号表示法访问与表达式匹配的键的值。
如果括号内的表达式不是有效键,则返回 undefined
。我们可以使用 nullish coalescing operator ??
检测这种未定义的情况并返回默认值。
例子:
console.log('使用有效大小写:', ({ 1: '一', 2: '二', 3: '三' })[1] ?? '默认') console.log('使用无效case/defaulting:', ({ 1: 'One', 2: 'Two', 3: 'Three' })[7] ?? 'Default') .as-console-wrapper {max-height: 100% !重要;顶部:0;}
这取决于,如果你的函数只包含 switch 语句,那么我认为它很好。但是,如果您想在该函数中执行任何其他操作,这可能不是一个好主意。您可能还必须考虑您现在和将来的需求。如果您想将功能从选项一更改为选项二,则需要进行更多重构。
但是,鉴于在 if/else 语句中,最佳做法是执行以下操作:
var foo = "bar";
if(foo == "bar") {
return 0;
}
else {
return 100;
}
基于此,可以认为选项一是更好的做法。
简而言之,没有明确的答案,所以只要您的代码遵循一致、可读、可维护的标准——也就是说,不要在整个应用程序中混合和匹配选项一和二,这是您应该做的最佳实践下列的。
return foo == "bar";
return foo == "bar" ? 0 : 100;
甚至 return [100,0][foo == "bar"];
。
return [100,0][+(foo == "bar")];
吗?
return [100,0][foo == "bar" & 1];
不定期副业成功案例分享
return {1:"One",2:"Two,3:"Three"}[opt];
。如果您需要默认值,那么它将是var o={1:"One",2:"Two,3:"Three"}; return opt in o?o[opt]:"";
return (opt in o) ? o[opt] : "";
技术,但在我的具体情况下它总是返回默认值。"Two"
中缺少第二个"
),但它对我有用......这是一个简单的测试:var o={1:"One",2:"Two",3:"Three"},opt=2; alert(opt in o?o[opt]:"");