JavaScript函数调用传递x&&;y作为参数
可能重复:JavaScript函数调用传递x&&;y作为参数,javascript,extjs,extjs4,Javascript,Extjs,Extjs4,可能重复: 在的示例代码中,有以下调用: this.setActiveButton(activeWindow && activeWindow.taskButton); 方法: setActiveButton: function(btn) { if (btn) { btn.toggle(true); } else { this.items.each(function (item) { if (item.is
在的示例代码中,有以下调用:
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);
}
});
}
}
函数调用中的
&&
的目的是什么?它是为了确保在试图查找变量“activeWindow”引用的对象的属性之前,该变量确实引用了某些内容。如果它是null
(或其他一些东西;我们假设代码知道它是对象引用或null
),则会导致异常。通过这种方式,函数被传递到按钮引用(不管是什么)或null
换言之,与此相同:
this.setActiveButton(activeWindow != null ? activeWindow.taskButton : null)
JavaScript中的
&&
运算符与C、Java或其他类似语言中的&&
运算符相比有点特殊。在JavaScript中,首先计算左侧。如果该值为“falsy”(null
、undefined
、false
、零或空字符串),则该值为表达式的值。否则,表达式的值就是右边的值。这是为了确保在试图查找变量“activeWindow”引用的对象的属性之前,该变量确实引用了某些内容。如果它是null
(或其他一些东西;我们假设代码知道它是对象引用或null
),则会导致异常。通过这种方式,函数被传递到按钮引用(不管是什么)或null
换言之,与此相同:
this.setActiveButton(activeWindow != null ? activeWindow.taskButton : null)
JavaScript中的&&
运算符与C、Java或其他类似语言中的&&
运算符相比有点特殊。在JavaScript中,首先计算左侧。如果该值为“falsy”(null
、undefined
、false
、零或空字符串),则该值为表达式的值。否则,表达式的值就是右侧的值。有关此方法的更多信息,请参阅
短路表达式x和y(使用Sand表示
短路变化)等效于条件表达式,如果
x然后y,否则为假;表达式x或y等价于if x then
真的
有关此方法的更多信息,请参阅
短路表达式x和y(使用Sand表示
短路变化)等效于条件表达式,如果
x然后y,否则为假;表达式x或y等价于if x then
真的
除了activeWindow或activeWindow.taskButton还可以是
未定义的
、假
、空字符串或0
,并且它将传递假。@jbabey是的,这是真的-这就是我所说的“或其他一些事情”,通过这种限定性假设,即代码知道它是对象引用或null。除了activeWindow或activeWindow.taskButton之外,它还可以是未定义的、false
、空字符串或0
,并且它将传递false。@jbabey是的,这是真的-这就是我所说的“或其他一些事情”,通过这种限定性假设,代码知道它是一个对象引用或null。在JavaScript中不正确-它不是真正的布尔运算符。整体表达式的值要么是左边的值,要么是右边的值,由左边的“真实性”决定。这并不重要,因为它已经关闭了,但我已经更新了我的答案以避免任何混淆。@RobB谢谢,但尖头的回答来得更早,所以我将他的标记为正确答案。仍然是+1。在JavaScript中不是真的-它不是真正的布尔运算符。整体表达式的值要么是左边的值,要么是右边的值,由左边的“真实性”决定。这并不重要,因为它已经关闭了,但我已经更新了我的答案以避免任何混淆。@RobB谢谢,但尖头的回答来得更早,所以我将他的标记为正确答案。仍然是+1。@z在JavaScript中不是很准确。&&
的值不一定是布尔值。它可以是任何东西。@z在JavaScript中不是很准确。&&
的值不一定是布尔值。它可以是任何东西。