【问题标题】:JavaScript function call passes x && y as parameters [duplicate]JavaScript函数调用将x && y作为参数传递[重复]
【发布时间】:2012-07-02 16:25:42
【问题描述】:

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

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

【问题讨论】:

  • @TheZ 在 JavaScript 中并不准确。 && 的值不一定是布尔值。它可以是任何东西。

标签: javascript extjs extjs4


【解决方案1】:

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

换一种说法,就是这样的:

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

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

【讨论】:

  • 除了activeWindow或activeWindow.taskButton也可以是undefinedfalse、空字符串或0,它会传递false。
  • @jbabey 是的,这是真的——这就是我所说的“或其他一些东西”的意思,以及代码知道它是对象引用或 null 的限定假设。
【解决方案2】:

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

短路表达式 x Sand y(用 Sand 表示 短路变体)等价于条件表达式 if x 然后 y 否则为假;表达式 x Sor y 等价于 if x then 否则是真的。

【讨论】:

  • 在 JavaScript 中不正确 - 它不是真正的 boolean 运算符。整个表达式的要么是左侧的值,要么是右侧的值,由左侧的“真实性”决定。
  • 这并不重要,因为它已经关闭,但我已经更新了我的答案以避免任何混淆。
  • @RobB 谢谢,Pointy 的回复来得早,所以我会把他的回复标记为正确的。仍然为你 +1。
猜你喜欢
  • 2013-08-13
  • 2014-06-07
  • 2019-08-08
  • 2019-07-23
  • 2011-04-07
  • 2012-10-28
  • 1970-01-01
相关资源
最近更新 更多