Сокращенный синтаксис 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)
            }
        }
    }
}();

РЕДАКТИРОВАТЬ Я изменил свой первый пример, чтобы использовать && в моем коде, и это сработало, вот и все - для всех, кто читает - и вы должны использовать абсолютные URL при работе с window.location

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

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

2 ответа

Решение

Общая закономерность !obj || obj = "something" это просто сокращение для:

if (obj === undefined) {
    obj = "something";
}

Это потому что !obj оценивает false если он не определен (шаблон также, кажется, предполагает, что obj не будет определяться как true).

Аналогично, шаблон f(a) && (g(b), h(c)) является сокращением для:

if (f(a) == true) {
    g(b);
    h(c);
}

Для указанного фрагмента кода:

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

Что это неявно говорит:

  1. Если data.user не определен, тогда установите success к истине.
  2. В противном случае (если data.user назначен), затем перенаправить на пользователей / профиль.

Точное значение - чье-то предположение, не зная контекста, но, похоже, оно означает "перенаправить экран профиля, если пользовательские данные доступны, в противном случае..."

Я думаю, что ты скучаешь по другому =:

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

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

Другие вопросы по тегам