2012-07-02 4 views
1

Можно создать дубликат:
&& operator in Javascriptвызова JavaScript функция передает х && у как параметров

В примере кода ExtJS web desktop demo есть следующий вызов:

this.setActiveButton(activeWindow && activeWindow.taskButton); 

к методу:

setActiveButton: function(btn) { 
    if (btn) { 
     btn.toggle(true); 
    } else { 
     this.items.each(function (item) { 
      if (item.isButton) { 
       item.toggle(false); 
      } 
     }); 
    } 
} 

Какова цель && в вызове функции?

+0

@ TheZ не очень точный в JavaScript. Значение '&&' не обязательно является логическим значением. Это может быть что угодно. – Pointy

ответ

3

Необходимо убедиться, что перед попыткой найти свойство объекта, на которое ссылается переменная «activeWindow», эта переменная фактически ссылается на что-то. Если это null (или несколько других вещей, мы предположим, что код знает, что это либо ссылка на объект, либо null), что вызовет исключение. Таким образом, функция передается либо ссылкой на кнопку (независимо от того, что есть), либо null.

Иными словами, это то же самое, как это:

this.setActiveButton(activeWindow != null ? activeWindow.taskButton : null) 

&& оператор в JavaScript является своего рода-специального по сравнению с && в C или Java или других языках, как это. В JavaScript сначала оценивается левая сторона. Если это значение является «ложным» (null, undefined, false, ноль или пустая строка), то это значение выражения. В противном случае значение выражения будет значением правой части.

+1

, за исключением того, что activeWindow или activeWindow.taskButton также могут быть 'undefined',' false', пустая строка или '0', и она будет ошибочной. – jbabey

+0

@jbabey да, это правда - это то, что я имел в виду под «или несколькими другими вещами», и этим квалификационным предположением, что код знает, что это либо ссылка на объект, либо нуль. – Pointy

1

См. Short-circuit evaluation для получения дополнительной информации об этом методе.

Короткое замыкание выражение х Песок у (с использованием песка, чтобы обозначить разнообразие в короткого замыкания) эквивалентно условного выражения, если х, то у еще ложь; выражение x Sor y эквивалентно x, то true else y.

+0

В JavaScript это не так - это не действительно оператор ** boolean **. * Значение * общего выражения - это либо значение левой стороны, либо значение правой стороны, определяемое «правдой» левой стороны. – Pointy

+0

Не то, чтобы это было важно, так как оно было закрыто, но я обновил свой ответ, чтобы избежать путаницы. – RobB

+0

@RobB Спасибо, но ответ Уайста пришел раньше, поэтому я буду отмечать его как правильный. Все еще + ты. –

Смежные вопросы