JavaScript布尔表达式简化

时间:2014-02-18 07:39:25

标签: javascript intellij-idea boolean

我从IntelliJ收到一条有关JavaScript代码的有趣警告信息:

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

我明白为什么结构condition ? true : false没有意义,但条件本身不应该代表一个布尔值?那么我为什么要对整个表达式使用双重否定呢?

2 个答案:

答案 0 :(得分:2)

问问自己:你真的需要它作为返回的布尔值吗?

回答你的问题:IntelliJ建议它的原因,是因为它是如何配置的 这只是IntelliJ处理无意义条件的方法之一。

the IntelliJ intentions documentation中,寻找:JavaScript - >条件运算符 - >删除无意义的条件。

双布尔否定(!!)是一种更短的,可以说更清晰的方法,可以将语句的结果转换为布尔值,而不是truthyfalsy语句通常会回来。

答案 1 :(得分:0)

您可以测试正则表达式:/^foo$|^bar$/i.test(a)。现在你也不需要三元。

!!将表达式转换为Boolean。这是为了确保你始终从中获得Boolean。如果您确定该表达式会提供“truthy/falsy”,我会说您可以在没有转换的情况下执行此操作。如果您使用上面的正则表达式,则转换绝对没有必要。