Что за странный синтаксис?
Я нашел неизвестный для меня код конструкции на сайте JQuery. После некоторого форматирования это выглядит так:
function (a,c) {
c==null && (c=a,a=null);
return arguments.length>0
? this.bind(b,a,c)
: this.trigger(b)
}
Что означает первая строка функции? Это какой-то трюк или стандартная конструкция кода JS?
3 ответа
Решение
Это трюк, который использует булево вычисление короткого замыкания для выполнения второй половины, только если первая оценка имеет значение true. Perl имеет это обычно:
<something> or die
где, если первый оператор потерпел неудачу, программа заканчивается.
Прочитайте это как
if (c == null) { c = a; a = null; }
Это ужасный способ написать
if(c==null) {
c = a;
a = null;
}
Это использует тот факт, что вторая часть логического &&
будет выполнено, если и только если первая часть оценивается как true.
В выражении используются две функции JavaScript:
- оценка коротких замыканий логических операторов: в контексте оператора,
a && (b);
эквивалентноif (a) (b);
- оператор запятой для группировки выражений присваивания: в контексте оператора,
a=b,b=c;
эквивалентно{ a=b; b=c }
В результате выражение эквивалентно:
if (c == null) {
c = a
a = null
}