Opcja 1 - zmiana za pomocą return:
function myFunction(opt)
{
switch (opt)
{
case 1: return "One";
case 2: return "Two";
case 3: return "Three";
default: return "";
}
}
Opcja 2 - przełączanie za pomocą 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;
}
Wiem, że oba działają, ale czy jest to jedna z najlepszych praktyk? Zwykle podoba mi się Opcja 1 - przełączanie za pomocą return najlepiej, ponieważ jest czystsze i prostsze.
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;
}
Aby wywołać funkcję, zrobiłbym to w następujący sposób:
getElementPrefix(SFAIC.common.masterPages.cs);
getElementPrefix(SFAIC.common.masterPages.cp);
getElementPrefix(SFAIC.common.contentPages.cs);
getElementPrefix(SFAIC.common.contentPages.cp);
Problem w tym, że zawsze zwraca wartość niezdefiniowaną. Zgaduję, że dzieje się tak, ponieważ przekazuje rzeczywistą wartość literału obiektu, a nie właściwości. Co mam zrobić, aby to naprawić za pomocą techniki opisanej w komentarzach @ ic3b3rg ?
javascript
return
switch-statement
break
Code Maverick
źródło
źródło
Odpowiedzi:
Przerwa pozwoli ci kontynuować przetwarzanie w funkcji. Samo wyjście z przełącznika jest w porządku, jeśli to wszystko, co chcesz zrobić w funkcji.
źródło
return {1:"One",2:"Two,3:"Three"}[opt];
. Jeśli potrzebujesz domyślnej wartości, będzie tovar o={1:"One",2:"Two,3:"Three"}; return opt in o?o[opt]:"";
return (opt in o) ? o[opt] : "";
, ale zawsze zwraca wartość domyślną w moim konkretnym przypadku."
w"Two"
), ale to działa na mnie ... Oto prosty test:var o={1:"One",2:"Two",3:"Three"},opt=2; alert(opt in o?o[opt]:"");
To zależy, jeśli twoja funkcja składa się tylko z instrukcji switch, to myślę, że jest w porządku. Jeśli jednak chcesz wykonać inne operacje w ramach tej funkcji, prawdopodobnie nie jest to świetny pomysł. Być może będziesz musiał rozważyć swoje wymagania teraz, a nie w przyszłości. Jeśli chcesz zmienić swoją funkcję z opcji pierwszej na drugą, konieczne będzie dodatkowe refaktoryzowanie.
Biorąc jednak pod uwagę, że w ramach instrukcji if / else najlepszą praktyką jest wykonanie następujących czynności:
Na tej podstawie można wysunąć argument, że pierwszą opcją jest lepsza praktyka.
Krótko mówiąc, nie ma jednoznacznej odpowiedzi, więc dopóki twój kod jest zgodny ze spójnym, czytelnym i łatwym do utrzymania standardem - to znaczy nie mieszaj i nie dopasowuj opcji jeden i dwa w całej aplikacji, to najlepsza praktyka, którą powinieneś być następujący.
źródło
return foo == "bar";
return foo == "bar" ? 0 : 100;
a nawetreturn [100,0][foo == "bar"];
.return [100,0][+(foo == "bar")];
?return [100,0][foo == "bar" & 1];