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。以上是我提出的条件,但我讨厌它有多久。什么是最短的写作方式?
答案 0 :(得分:0)
如果定义的this.activeId
的有效值都是真实的(例如,它不能是0
,false
或null
),您可以使用:
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的一些好处。 这实际上取决于你的目标,有时更冗长意味着更具可读性。