Вариант 1 - переключиться с помощью возврата:
function myFunction(opt)
{
switch (opt)
{
case 1: return "One";
case 2: return "Two";
case 3: return "Three";
default: return "";
}
}
Вариант 2 - переключение с помощью перерыва:
function myFunction(opt)
{
var retVal = "";
switch (opt)
{
case 1:
retVal = "One";
break;
case 2:
retVal = "Two";
break;
case 3:
retVal = "Three";
break;
}
return retVal;
}
Я знаю, что оба работают, но это еще один из лучших практик? Мне больше нравится вариант 1 - лучше использовать возврат, так как он чище и проще.
Вот jsFiddle моего конкретного примера, использующего технику, упомянутую в комментариях @ ic3b3rg :
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;
}
Чтобы вызвать функцию, я бы сделал это следующими способами:
getElementPrefix(SFAIC.common.masterPages.cs);
getElementPrefix(SFAIC.common.masterPages.cp);
getElementPrefix(SFAIC.common.contentPages.cs);
getElementPrefix(SFAIC.common.contentPages.cp);
Проблема здесь в том, что он всегда возвращает неопределенное значение. Я предполагаю, что это потому, что он передает фактическое значение литерала объекта, а не свойства. Что бы я сделал, чтобы исправить это, используя технику, описанную в комментариях @ ic3b3rg ?
javascript
return
switch-statement
break
Код Маверик
источник
источник
Ответы:
Перерыв позволит вам продолжить обработку в функции. Просто вернуться из переключателя - это нормально, если это все, что вы хотите сделать в функции.
источник
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]:"");
Это зависит, если ваша функция состоит только из оператора switch, то я думаю, что это нормально. Однако, если вы хотите выполнить какие-либо другие операции внутри этой функции, это, вероятно, не очень хорошая идея. Вам также, возможно, придется рассмотреть ваши требования прямо сейчас, а не в будущем. Если вы хотите изменить свою функцию с первого варианта на второй, потребуется больше рефакторинга.
Однако, учитывая, что в операторах if / else лучше всего делать следующее:
Исходя из этого, можно утверждать, что первый вариант - лучшая практика.
Короче говоря, нет однозначного ответа, поэтому, пока ваш код придерживается согласованного, читабельного, поддерживаемого стандарта, то есть не смешивайте и не сочетайте варианты один и два в вашем приложении, это лучшая практика, которой вы должны руководствоваться. следующий.
источник
return foo == "bar";
return foo == "bar" ? 0 : 100;
или дажеreturn [100,0][foo == "bar"];
.return [100,0][+(foo == "bar")];
?return [100,0][foo == "bar" & 1];