JavaScript函数调用传递x&& y作为参数

时间:2012-07-02 16:25:42

标签: javascript extjs extjs4

  

可能重复:
  && operator in 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);
            }
        });
    }
}

函数调用中&&的目的是什么?

2 个答案:

答案 0 :(得分:3)

确保在尝试在变量“activeWindow”引用的对象上查找属性之前,该变量确实引用了某些内容。如果它是null(或其他一些东西;我们假设代码知道它是对象引用或null),那将导致异常。这样,函数就会传递按钮引用(无论是什么),还是null

换句话说,它与此相同:

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

JavaScript中的&&运算符与C或Java中的&&或其他类似的语言相比有点特殊。在JavaScript中,首先评估左侧。如果该值为“falsy”(nullundefinedfalse,零或空字符串),那么这就是表达式的值。否则,表达式的值是右侧的值。

答案 1 :(得分:1)

有关此方法的其他信息,请参阅Short-circuit evaluation

  

短路表达式x Sand y(使用Sand表示   短路种类)相当于条件表达式if   x然后y其他错误;表达式x Sor y等于if x then   其他是真的。