讓我們看看你能做些什麼來縮短這
(!this.initialized || (typeof this.activeId !== 'undefined' && options.qualification_id !== this.activeId))
首先,您可以刪除內部括號。根據operator precedence表,邏輯AND具有比「邏輯或」更高的「優先級」。換句話說,口譯員會爲您添加括號。所以,你的病情變成:
(!this.initialized || typeof this.activeId !== 'undefined' && options.qualification_id !== this.activeId)
好多了。你可以做的另一件事是利用JS類型轉換。 undefined
值falsey(進行評估,以false
),你的情況可以成爲:
(!this.initialized || this.activeId && options.qualification_id !== this.activeId)
然而,這可能會插入一個無聲的錯誤,因爲的0
的activeId
也將進行評估,以false
。您可以使用in
運算符來解決此問題,該運算符會檢查該對象或其某個原型上是否存在該屬性(爲了確保該屬性不是來自其原型之一,可以使用hasOwnProperty
方法)。
(!this.initialized || 'activeId' in this && options.qualification_id !== this.activeId).
現在說實話,這對我來說並不好看。通常,每當線條變得太長時,只需將其分成多行以增加可讀性。
var qualificationIsDifferent = options.qualification_id !== this.activeId;
var isNotActive = this.hasOwnProperty('activeId') && qualificationIsDifferent;
var shouldDoStuff = !this.initialized || isNotActive;
if (shouldDoStuff) { ... }
請注意,通過使用上述方法,您將失去short-circuit evaluation的一些好處。 這真的取決於你的目標,有時更冗長意味着更具可讀性。
如果定義了'this.activeId',那麼它的任何可能的值都是falsey值?即Id可以是0嗎? – Barmar