如何缩短这种条件?

时间:2015-09-11 11:12:01

标签: javascript ecmascript-5

if (!this.initialized || (typeof this.activeId !== 'undefined' && options.qualification_id !== this.activeId)) {
    //Stuff
}

如果this.initialized标志为false或this.activeId值与options.qualification_id相同,我想执行代码。我必须检查是否定义了this.activeId,因为在undefined!== this.activeId的情况下,Javascript将返回true。以上是我提出的条件,但我讨厌它有多久。什么是最短的写作方式?

2 个答案:

答案 0 :(得分:0)

如果定义的this.activeId的有效值都是真实的(例如,它不能是0falsenull),您可以使用:

if (!this.initialized || this.activeId && options.qualification_id != this.activeId)

答案 1 :(得分:0)

让我们看看你可以做些什么来缩短这个

(!this.initialized || (typeof this.activeId !== 'undefined' && options.qualification_id !== this.activeId))

首先,您可以删除内括号。根据{{​​3}}表,逻辑AND具有更高的优先级"比对数OR。换句话说,解释器将为您添加括号。所以,你的状况变成了:

(!this.initialized || typeof this.activeId !== 'undefined' && options.qualification_id !== this.activeId)

好多了。您可以做的另一件事是利用JS类型转换。 undefined值为falsey(评估为false),您的条件可能会变为:

(!this.initialized || this.activeId && options.qualification_id !== this.activeId)

但是,这可能会插入一个无声的错误,因为activeId的{​​{1}}也会被评估为0。您可以使用false运算符解决此问题,该运算符检查对象或其原​​型之一是否存在该属性(为了确保该属性不是来自其原型之一,您可以使用取而代之的是in方法。

hasOwnProperty

说实话,这对我来说并不是那么好看。通常,只要线条变得太长,只需将其分成多行以增加可读性。

(!this.initialized || 'activeId' in this && options.qualification_id !== this.activeId).

请注意,使用上述方法会失去Magento's free extensions的一些好处。 这实际上取决于你的目标,有时更冗长意味着更具可读性。