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