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