2014-02-18 59 views
0

我得到了一個有趣的警告信息的IntelliJ從對一些JavaScript代碼:JavaScript的布爾表達式簡化

((a === 'foo') || (a === 'bar')) ? true : false' can be simplified to '!!(((a === 'foo') || (a === 'bar')))

我明白爲什麼結構condition ? true : false沒有意義,但不應該在條件本身代表布爾值?那麼,爲什麼我應該對整個表達使用雙重否定呢?

+1

我假設你問爲什麼IntelliJ產生這樣的「簡化」建議? – CppLearner

+1

我假設IntelliJ只識別'cond? true:false'部分,但實際上並不知道'cond'返回的是什麼。這就是爲什麼它加上'!!'作爲預防措施。但是你是對的,這裏沒有必要。 –

+0

問問自己:你真的需要它是一個返回的布爾值嗎?是不是一個「truthy」夠好? – Cerbrus

回答

2

問問自己:你真的需要它是一個返回的布爾值嗎?

要回答你的問題:IntelliJ建議它的原因,是因爲它是如何配置的。
這只是IntelliJ處理無意義條件的一種方法。

the IntelliJ intentions documentation中,查找:JavaScript - >條件運算符 - >刪除無條件有條件。

雙布爾否定(!!)是將語句結果轉換爲布爾值而不是通常返回的truthyfalsy的較短且可以說是更簡潔的方法。

+0

任何人都知道爲什麼這有一個downvote? o.O – Cerbrus

0

您可以測試正則表達式:/^foo$|^bar$/i.test(a)。現在你也不需要三元組了。

!!將表達式轉換爲Boolean。這是爲了確保你總是得到一個Boolean。如果你確定這個表達式會傳遞一些東西'truthy/falsy',我會說你可以不做轉換。如果使用上面的正則表達式,轉換是絕對沒有必要的。

+0

(見編輯)現在不是。 – KooiInc

+0

Yeap,更好:) – Cerbrus

+3

雖然沒有真正回答這個問題。 –