在我在工作中继承的一些代码中,我试图弄清楚这些条件是如何工作的,但是我不确定它是如何构造的以及它们是什么类型的条件语句(这起源于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);
这些类型的条件陈述是否有名称或方法?你会如何看待它正在做的第二个呢?
非常感谢有人提供的任何帮助或见解!
答案 0 :(得分:2)
它们只是复合语句,包括短路逻辑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