сокращенный синтаксис javascript

Мне было интересно, как это можно записать в сокращении, чтобы оператор выполнялся

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

Может ли кто-нибудь объяснить правильное использование этого сокращенного синтаксиса? Я хочу "выполнить", а НЕ "оценить" второе утверждение, если первое оценивается как истинное!

var succes = !data.user||(window.location = "users/profile");

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

},
        hide: function (a,
        b) {
            if (f && !(500 > (new Date).getTime() - f.getTime())) {
                if (!a || "number" == typeof a) a = k();
                b || (b = $(".profile-popup"));
                j(a) && (b.fadeOut("fast"), m(!1, a));
                e && (clearInterval(e), e = null)
            }
        }
    }
}();

EDIT Я изменил свой первый пример, чтобы использовать && в моем коде, и это сработало, так что это все - для всех, кто читает - и вы должны использовать абсолютный URL-адрес, если работаете с window.location

Я также нашел еще одно подробное объяснение здесь.

спасибо, Ричард


person Richard    schedule 02.09.2012    source источник
comment
первый должен выполнить window.location НЕ оценивать его, поэтому, если первый не соответствует действительности, он никогда не придет к следующей оценке (в этом случае оператор для выполнения   -  person Richard    schedule 02.09.2012


Ответы (2)


Я думаю, вы пропустили еще один =:

var succes = !data.user || (window.location == "users/profile");

Ваш пример присваивает, тогда как == - это сравнение.

person Bojangles    schedule 02.09.2012
comment
Я не думаю, что это правильно. Window.location никогда не будет равно этому. Я думаю, что это утверждение предназначено для назначения = для перенаправления пользователя на экран профиля. - person McGarnagle; 02.09.2012
comment
window.location является объектом, поэтому сравнение window.location == "users/profile" не имеет смысла. - person dfsq; 02.09.2012
comment
Другими словами, window.location — это URL-адрес текущей страницы. URL-адрес всегда должен содержать как минимум http://hostname, так что это ничем не отличается от написания var success = !data.user || false;, что, в свою очередь, эквивалентно написанию var success = false;. - person McGarnagle; 02.09.2012
comment
спасибо, но я думал, что вы могли бы как-то выполнять операторы НЕ оценивать - person Richard; 02.09.2012

person    schedule
comment
да, это правда, но мне пришлось использовать && вместо || думаю, не уверен - person Richard; 02.09.2012
comment
@Richard && тоже не имеет смысла, тогда это утверждение будет просто безоговорочным перенаправлением. - person McGarnagle; 02.09.2012
comment
во втором примере, который я взял из переполнения, также используется - j(a) && (b.fadeOut(fast), m(!1, a)); ЕСЛИ первый будет логическим возвратом из функции, второй явно является оператором, который выполняется??? - person Richard; 02.09.2012
comment
@Richard if (!a || "number" == typeof a), если a не определено или является числом. - person McGarnagle; 02.09.2012
comment
@Richard b || (b = $(".profile-popup"));, если b не определено, назначьте его ... - person McGarnagle; 02.09.2012
comment
Да, я получаю типы оценки, но не те, которые выполняют операторы EXECUTE, извините те, где присваивания, ДА, мне тоже нужно их изучить, спасибо - также, @dbaseman, можете ли вы объяснить второй пример кода? - person Richard; 02.09.2012
comment
@Richard j(a) && (b.fadeOut("fast"), m(!1, a)); - если первая часть j(a) ложна, вторая часть не будет выполняться. Так что это похоже на запись, если j (a) == true, тогда выполните это... - person McGarnagle; 02.09.2012
comment
хорошо, ТАК, что вы действительно можете выполнять операторы с этим, в моем коде это не сработало, но это потому, что я не использовал &&. @dbaseman, что касается правильного использования, можете ли вы также ставить операторы после друг друга с запятой, и вам нужно заключать оба оператора в круглые скобки ?? - для уточнения, пожалуйста. Это также помогает мне лучше читать код плагина - person Richard; 02.09.2012
comment
спасибо за обновление вашего ответа, теперь он для меня уже не такой расплывчатый! - person Richard; 02.09.2012