我从IntelliJ收到一条有关JavaScript代码的有趣警告信息:
((a === 'foo') || (a === 'bar')) ? true : false' can be simplified to '!!(((a === 'foo') || (a === 'bar')))
我明白为什么结构condition ? true : false
没有意义,但条件本身不应该代表一个布尔值?那么我为什么要对整个表达式使用双重否定呢?
答案 0 :(得分:2)
问问自己:你真的需要它作为返回的布尔值吗?
回答你的问题:IntelliJ建议它的原因,是因为它是如何配置的 这只是IntelliJ处理无意义条件的方法之一。
在the IntelliJ intentions documentation中,寻找:JavaScript - >条件运算符 - >删除无意义的条件。
双布尔否定(!!
)是一种更短的,可以说更清晰的方法,可以将语句的结果转换为布尔值,而不是truthy
或falsy
语句通常会回来。
答案 1 :(得分:0)
您可以测试正则表达式:/^foo$|^bar$/i.test(a)
。现在你也不需要三元。
!!
将表达式转换为Boolean
。这是为了确保你始终从中获得Boolean
。如果您确定该表达式会提供“truthy/falsy”,我会说您可以在没有转换的情况下执行此操作。如果您使用上面的正则表达式,则转换绝对没有必要。