什么是&&;javascript表达式中的返回

什么是&&;javascript表达式中的返回,javascript,Javascript,我在某个应用程序中阅读javascipt代码,代码如下 getTotalFees:function(){ return this.grid &&this.grid.getStore().sum('fees'); } 现在我不知道它会返回什么 在我看来是 返回a&b 它不会返回true或false而不是b吗 逻辑AND(&&): expr1&&expr2如果可以转换为false,则返回expr1;否则,返回expr2。因此,当与布尔值一起使用时,&

我在某个应用程序中阅读javascipt代码,代码如下

getTotalFees:function(){
        return this.grid
        &&this.grid.getStore().sum('fees');
}
现在我不知道它会返回什么

在我看来是

返回a&b

它不会返回true或false而不是b吗

逻辑AND(
&&
):
expr1&&expr2
如果可以转换为false,则返回
expr1
;否则,返回
expr2
。因此,当与布尔值一起使用时,
&
如果两个操作数都是
true
,则返回
true
;否则,返回
false

因此,基本上:
如果第一个参数是
falsy
,则返回该参数。否则,它会返回第二个参数


在您的例子中,这意味着,如果
this.grid
存在,它将返回
this.grid.getStore().sum('fees')

您误解了
&
的作用。让
a
b
成为“实体”。然后
a&&b
执行以下操作:

  • 评估
    a
  • 如果
    a
    为falsy返回
    a
  • 如果
    a
    是真实的,则评估
    b
  • 返回
    b
  • 例如:

    var f = function() {
        console.log("test");
        return 'foo';
    }
    
    > 0 && f()
    0
    > 1 && f()
    test
    "foo"
    
    注意,在第一种情况下,我们没有得到
    console.log
    ,因为
    f()
    没有计算,因为
    0
    是错误的。这个属性很重要,而且实际上很重要

    a && b != b && a
    
    尽管从数学上来说应该是一样的(但这不是由于评估的副作用)

    Falsy值包括:
    0
    false
    (空字符串),
    null
    未定义的
    NaN
    (非数字类型)。我认为没有任何其他可能的价值观(如果我错了,有人会纠正我)。其他任何事物都是真实的

    因此,在您的情况下,代码可以重写为:

    if (this.grid) {
        return this.grid.getStore().sum('fees');
    } else {
        return this.grid;
    }
    

    好的,让我们假设
    this.grid.getStore().sum('fees')
    返回一些东西,让我们说“Ok!”

    现在,代码中的return语句是一种复杂的表达方式:

    if(this.grid)//this.grid is defined and doesn't evaluate as 'false'
        return this.grid.getStore().sum('fees');
    else
        return this.grid;
    
    如果没有网格,我们将返回undefined,否则我们将调用
    gridStore…
    并返回它自己的返回。 这是避免“未定义没有方法‘gridStore’”的常见方法


    非常重要的一点是,在
    a&&f()
    中,如果“a”的计算结果为false,则不会调用f()。有许多东西的计算结果为false,例如任何未定义的变量、
    null
    、空字符串。。。(请注意,包含虚假内容的字符串,如
    “false”
    “0000”
    实际上是真实的)。甚至像
    function(){returnnull;}()这样的不可读的语言的计算结果可能为false。

    这样做是为了防止在未定义的属性上调用方法,否则会导致错误。因此,如果
    this.grid
    undefined
    ,则返回
    undefined

    在表达式中,如果当
    a
    等于
    false
    a&&b
    (或者在javascript中,它可以是类似于Cerburs答案的表达式),则返回
    a


    | |
    操作符类似,从左开始的第一个等于
    true
    (在javascript中不是0,不是未定义的,当然不是null,不是NaN,也不是false)的操作符被返回。

    如果
    a
    不是
    未定义的
    b
    不是
    未定义的
    ,return
    b
    。该代码在功能上等同于if(this.grid){return this.grid.getStore().sum('fees');}
    3。如果
    a
    的定义不真实,或者如果它不是
    未定义的
    @algorhytim
    “&&2===”
    ,而显然
    是定义的。”“是假的,0和“假”也是假的@algorhytim是的,这正是我写的。空字符串是falsy。@Boris是的,但它不是
    未定义的
    ,我评论说“…,如果它不是未定义的更好”如果网格不存在,它将返回
    False
    this.grid
    ,它是
    未定义的
    ,然后它将返回
    this.grid
    ,它是
    未定义的
    ,它甚至不会尝试调用
    this.grid.getStore().sum('fees'),从而避免了错误。实际上,这不是相同的代码。
    if
    语句应该是
    if(this.grid)
    。否则它会做不同的事情(如果
    this.grid
    0
    ?),是的,你是对的,或者
    如果(!!this.grid)
    。但我认为这会更容易理解。我来编辑