我得到了一个有趣的警告信息的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