我正在阅读某些应用程序中的javascipt代码,代码就是这个
getTotalFees:function(){
return this.grid
&&this.grid.getStore().sum('fees');
}
现在我很困惑它会回来。
IT看起来像
return a&&b
不会返回true或false而不是b
答案 0 :(得分:2)
逻辑AND(
&&
):
expr1 && expr2
如果可以转换为false,则返回expr1
;否则,返回expr2
。因此,当与布尔值一起使用时,如果两个操作数均为&&
,则true
将返回true
;否则,返回false
。
所以,基本上:
如果第一个参数是falsy
,则返回该参数。否则,它确实返回第二个参数。
在您的情况下,这意味着,如果存在this.grid
,则会返回this.grid.getStore().sum('fees');
答案 1 :(得分:1)
你误解了&&
的作用。让a
和b
成为"实体"。然后a && b
执行:
a
a
是假的,则返回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
即使在数学上它应该是相同的(但它不是由于评估的副作用)。
虚假值包括:0
,false
,""
(空字符串),null
,undefined
,NaN
(不是数字)类型)。我不认为还有其他任何可能的价值观(如果我错了,有人会纠正我)。其他所有对象都是真实的。
因此,在您的情况下,代码可以重写为:
if (this.grid) {
return this.grid.getStore().sum('fees');
} else {
return this.grid;
}
答案 2 :(得分:1)
这样做是为了防止在未定义属性上调用方法,这会导致错误。因此,如果this.grid
为undefined
,则会返回undefined
。
如果a && b
a
当false
等于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;}();
这样难以理解的唠叨都可能被评为假。