Сокращенный синтаксис 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");
Что это неявно говорит:
- Если data.user не определен, тогда установите
success
к истине. - В противном случае (если
data.user
назначен), затем перенаправить на пользователей / профиль.
Точное значение - чье-то предположение, не зная контекста, но, похоже, оно означает "перенаправить экран профиля, если пользовательские данные доступны, в противном случае..."
Я думаю, что ты скучаешь по другому =
:
var succes = !data.user || (window.location == "users/profile");
Ваш пример присваивает, тогда как ==
это сравнение.