在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 :(得分:3)
确保在尝试在变量“activeWindow”引用的对象上查找属性之前,该变量确实引用了某些内容。如果它是null
(或其他一些东西;我们假设代码知道它是对象引用或null
),那将导致异常。这样,函数就会传递按钮引用(无论是什么),还是null
。
换句话说,它与此相同:
this.setActiveButton(activeWindow != null ? activeWindow.taskButton : null)
JavaScript中的&&
运算符与C或Java中的&&
或其他类似的语言相比有点特殊。在JavaScript中,首先评估左侧。如果该值为“falsy”(null
,undefined
,false
,零或空字符串),那么这就是表达式的值。否则,表达式的值是右侧的值。
答案 1 :(得分:1)
有关此方法的其他信息,请参阅Short-circuit evaluation。
短路表达式x Sand y(使用Sand表示 短路种类)相当于条件表达式if x然后y其他错误;表达式x Sor y等于if x then 其他是真的。