Javascript возвращает ложь в операторах if - PullRequest
7 голосов
/ 14 сентября 2010

Является ли хорошей практикой использование «return false»;в основном сказать, ничего не делать в операторе if?Например:

if (navigator.userAgent.match(/iPad/i) != null) {
    return false;
} else {
    //Usual script here
}

просто интересно, есть ли какие-либо недостатки в этом.Я могу использовать утверждение if без else, но я просто хочу получить представление об этом.У меня есть плагин, который я не хочу запускать на iPad, и поэтому я обертываю его в условный.любые комментарии будут оценены!

Ответы [ 6 ]

9 голосов
/ 14 сентября 2010

Группа 1 скажет, что это ужасная практика, поскольку за ней трудно следовать.

Группа 2 скажет: «Сделай это».

Группа 3 скажет «Сделай это», но в 1 строке

Группа 4 скажет, что не используйте else

Группа 5 скажет, что не использует return, просто используйте if в коде, который вы хотите запустить.АКА:

if (navigator.userAgent.match(/iPad/i) === null) {
    //Usual script here
}
5 голосов
/ 14 сентября 2010

По моему опыту, только если вы действительно искали ложное, которое должно быть возвращено.

2 голосов
/ 14 сентября 2010

Вы можете еще больше упростить это, например так:

if (navigator.userAgent.match(/iPad/i) != null) return false;
//Usual script here

Это "хорошая практика" ... конечно, если это работает для вас и вашей команды. Выпрыгнув из функции, как только вам больше нечего делать, есть очень эффективный способ сделать что-то, если его легко понять и поддерживать для того, кто над ним работает.

Если вы хотите, чтобы false конкретно зависело от ситуации, например, если вы хотите вернуться, но не препятствует запуску других обработчиков событий позже, вы можете вместо этого return true;.

1 голос
/ 14 сентября 2010

во-первых, это очень хорошая практика, возьмите этот пример

var window.__page_loaded__;
var Loadpage = function ()
{
    if(window.__page_loaded__ != undefined)
    {
         return; //The page has already laoded
    }

    //Proceed to load the page
}

, используя return;, вы делаете то же самое, что и с оператором else, но без дополнительного блока, и как Loadpage(), как правило, не возвращает никаких данных, это прекрасно для сокращения вашего кода.

0 голосов
/ 14 сентября 2010

Я согласен с snkmchnb , в противном случае просто отмените условие.Вы можете отменить длинное выражение, используя эти:

!(a && b) = !a || !b
!(a || b) = !a && !b

И используйте это несколько раз, чтобы получить то, что вы хотите.Например, отрицание длинного выражения

!( (a && b || c) && (d || e) || f) =
    !((a && b || c) && (d || e)) && !f =
    (!(a && b || c) || !(d || e)) && !f =
    (!(a && b) && !c || !d && !e) && !f =
    ((!a || !b) && !c || !d && !e) && !f

Теперь это выглядит ужасно, но отрицание в большинстве случаев не означает чрезмерного усложнения.Например, отрицание "<=" приводит к ">"

Поэтому никогда не используйте! (Long_expression):

if (long expression)
{
}
else
{
  //do stuff here
}
0 голосов
/ 14 сентября 2010

Вы должны возвращать значение, только если вызывающая сторона собирается что-то сделать с этим значением.Если вы хотите ничего не делать в операторе if, это признак того, что ваша логика неверна.Измените свое утверждение следующим образом:

if (navigator.userAgent.match(/iPad/i) == null) {
    //Usual script here
}

Таким образом, вам не нужно «вырываться» из своей функции с помощью return (в этом сценарии это не очень хорошая практика).

...