奇怪的使用&&在一个if之外?

时间:2014-06-11 15:49:13

标签: javascript

假设我们有这个功能:

loadView : function(view) {
    this.view && this.view.remove();
    this.view = view;
}

第一行有什么作用?例如,如果该行是this.view&& this.otherView,如果view和otherView都存在则返回true,如果其中一个不存在则返回false,但现在最后调用了一个函数,这让我感到困惑。

第一行是否相当于:

if(this.view) {this.view.remove()}

2 个答案:

答案 0 :(得分:3)

它是short circuit evaluation

如果this.view"falsey",则不会评估this.view.remove()

所以问题的答案是肯定的。

答案 1 :(得分:1)

它被称为守卫运营商。你通常会使用&&以这种方式

if(thing1 === 1 && thing2 === 2){}

你会注意到我们想要检查两件事情是否真实。它的工作方式是我们知道如果第一个表达式(thing1 === 1)没有计算为true,那么'thing 2 === 0'将永远不会运行。为什么要运行第二个表达式,如果它们都必须为true且第一个表达式已经失败。利用这些知识,我们现在可以使用它作为一个守卫,不运行第二个表达式,除非第一个表达式是真的,或者在这种情况下是真实的。

所以在你的代码中,this.view.remove()仅在this.view真实时运行。