选项1 - 使用 return
的 switch
:
function myFunction(opt) {
switch (opt) {
case 1: return "One";
case 2: return "Two";
case 3: return "Three";
default: return "";
}
}
选项二 - 使用 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;
}
我知道两种方法都可以,但哪一种更符合最佳实践呢?我倾向于使用Option 1 - 使用return
的switch
,因为它更加简洁明了。
这里是我的具体示例的jsFiddle,使用了@ic3b3rg评论中提到的技巧:
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)。我猜测这是因为它传递的是对象字面量的实际值而不是属性(property)。按照@ic3b3rg评论中描述的技术,我该怎么做来解决这个问题?
return {1:"One",2:"Two,3:"Three"}[opt];
。如果你需要默认值,那么它应该是var o={1:"One",2:"Two,3:"Three"}; return opt in o?o[opt]:"";
。 - ic3b3rgreturn (opt in o) ? o[opt] : "";
,但在我的具体情况下它总是返回默认值。 - Code Maverickfunction getElementPrefix(type,page){return (type in SFAIC.common) && (page in SFAIC.common[type]) ? SFAIC.common[type][page] : undefined;}
- ic3b3rg