我得到了一個有趣的警告信息的IntelliJ從對一些JavaScript代碼:JavaScript的布爾表達式簡化
((a === 'foo') || (a === 'bar')) ? true : false' can be simplified to '!!(((a === 'foo') || (a === 'bar')))
我明白爲什麼結構condition ? true : false
沒有意義,但不應該在條件本身代表布爾值?那麼,爲什麼我應該對整個表達使用雙重否定呢?
我得到了一個有趣的警告信息的IntelliJ從對一些JavaScript代碼:JavaScript的布爾表達式簡化
((a === 'foo') || (a === 'bar')) ? true : false' can be simplified to '!!(((a === 'foo') || (a === 'bar')))
我明白爲什麼結構condition ? true : false
沒有意義,但不應該在條件本身代表布爾值?那麼,爲什麼我應該對整個表達使用雙重否定呢?
問問自己:你真的需要它是一個返回的布爾值嗎?
要回答你的問題:IntelliJ建議它的原因,是因爲它是如何配置的。
這只是IntelliJ處理無意義條件的一種方法。
在the IntelliJ intentions documentation中,查找:JavaScript - >條件運算符 - >刪除無條件有條件。
雙布爾否定(!!
)是將語句結果轉換爲布爾值而不是通常返回的truthy
或falsy
的較短且可以說是更簡潔的方法。
任何人都知道爲什麼這有一個downvote? o.O – Cerbrus
您可以測試正則表達式:/^foo$|^bar$/i.test(a)
。現在你也不需要三元組了。
!!
將表達式轉換爲Boolean
。這是爲了確保你總是得到一個Boolean
。如果你確定這個表達式會傳遞一些東西'truthy/falsy',我會說你可以不做轉換。如果使用上面的正則表達式,轉換是絕對沒有必要的。
我假設你問爲什麼IntelliJ產生這樣的「簡化」建議? – CppLearner
我假設IntelliJ只識別'cond? true:false'部分,但實際上並不知道'cond'返回的是什麼。這就是爲什麼它加上'!!'作爲預防措施。但是你是對的,這裏沒有必要。 –
問問自己:你真的需要它是一個返回的布爾值嗎?是不是一個「truthy」夠好? – Cerbrus