这些javascript条件语句是什么类型的?

时间:2018-04-19 16:51:11

标签: javascript

在我在工作中继承的一些代码中,我试图弄清楚这些条件是如何工作的,但是我不确定它是如何构造的以及它们是什么类型的条件语句(这起源于jQuery jBox插件)< / p>

phrase

第二个条件:

this._fireEvent = function( event, pass ) {
   // This condition here
   this.options[ event ] && ( this.options[ event ].bind( this ) )( pass );
};

在传统的if语句中,我能说出的第一个是......

this.options.pointTo == 'target' && (!this.options.outside || this.options.outside == 'xy') && (this.options.pointer = false);

这些类型的条件陈述是否有名称或方法?你会如何看待它正在做的第二个呢?

非常感谢有人提供的任何帮助或见解!

3 个答案:

答案 0 :(得分:2)

它们只是复合语句,包括短路逻辑AND(&&)和短路逻辑OR(||)运算符,可同时测试多个事物。

  • 短路AND意味着如果任何条件失败(处理 从左到右),整个表达式失败并且不继续 评估表达。
  • OR短路意味着如果任何条件成功 (从左到右处理),整个表达式成功并且 不要继续评估表达。

此外,分组运算符()用于将条件组合在一起,有效地创建必须独立于表达式其余部分进行求值的条件。

答案 1 :(得分:2)

this.options[ event ] && ( this.options[ event ].bind( this ) )( pass );

如果等于

if (this.options[ event ] ) 
    ( this.options[ event ].bind( this ) )( pass );

this.options[ event ] ? ( this.options[ event ].bind( this ) )( pass ) : null 

this.options.pointTo == 'target' && (!this.options.outside || this.options.outside == 'xy') && (this.options.pointer = false);

几乎相同
this.options.pointTo == 'target' ? (!this.options.outside : this.options.outside == 'xy') && (this.options.pointer = false);

或等效的if语句

总结一下:

当且仅当左侧为真时,

&&将执行右侧

当且仅当左侧为假

时,

||才会执行右侧

答案 2 :(得分:1)

它被称为短路声明评估。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators

您根据优先顺序阅读它:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

因此,在您的情况下,它将被解读为: 'target' && (!this.options.outside || this.options.outside == 'xy') && (this.options.pointer = false);

First_truthy_value && (Second block evaluation) && (Third block evaluation which finally gets returned as a 'value')

然而,您的第三个块是一个赋值语句this.options.pointer = false,它将始终返回false