2014-02-18 36 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

虽然没有真正回答这个问题。 –