什么和&&在javascript表达式中返回

时间:2014-06-25 07:47:04

标签: javascript

我正在阅读某些应用程序中的javascipt代码,代码就是这个

getTotalFees:function(){
        return this.grid
        &&this.grid.getStore().sum('fees');
}

现在我很困惑它会回来。

IT看起来像

return a&&b

不会返回true或false而不是b

4 个答案:

答案 0 :(得分:2)

  

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

Source

所以,基本上:
如果第一个参数是falsy,则返回该参数。否则,它确实返回第二个参数。

在您的情况下,这意味着,如果存在this.grid,则会返回this.grid.getStore().sum('fees');

答案 1 :(得分:1)

你误解了&&的作用。让ab成为"实体"。然后a && b执行:

  1. 评估a
  2. 如果a是假的,则返回a
  3. 如果a真实地评估b
  4. return b
  5. 示例:

    var f = function() {
        console.log("test");
        return 'foo';
    }
    
    > 0 && f()
    0
    > 1 && f()
    test
    "foo"
    

    请注意,在第一种情况下,我们没有获得console.log,因为f()未被评估,因为0是假的。这个属性很重要,实际上是

    a && b != b && a
    

    即使在数学上它应该是相同的(但它不是由于评估的副作用)。

    虚假值包括:0false""(空字符串),nullundefinedNaN(不是数字)类型)。我不认为还有其他任何可能的价值观(如果我错了,有人会纠正我)。其他所有对象都是真实的。

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

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

答案 2 :(得分:1)

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

如果a && b afalse等于a时(或者在javascript中它可以是Cerburs答案中的表达式),则表达式{}返回{/ 1}}。

||运算符类似,返回左边的第一个等于true(在javascript中不是0,未定义,不为null,不是NaN,当然不是false)。< / p>

答案 3 :(得分:0)

好吧,让我们假设this.grid.getStore().sum('fees')返回一些东西,让我们说#34;好吧!&#34;。

现在代码中的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...并返回自己的返回。 这是一种常见的避免方式&#34; undefined没有方法&#39; gridStore&#39;&#34;

非常重要的一点是,在a && f()中,如果&#39; a&#39;将不会调用f()。评估为假。有很多东西被评估为false,例如任何未定义的变量,null,空字符串......(请注意,包含"false""0000"等虚假内容的字符串实际上是真的。甚至像function(){return null;}();这样难以理解的唠叨都可能被评为假。