if(!!condition) 和 if(condition) 有啥区别

Posted

技术标签:

【中文标题】if(!!condition) 和 if(condition) 有啥区别【英文标题】:What is the difference between if(!!condition) and if(condition)if(!!condition) 和 if(condition) 有什么区别 【发布时间】:2013-11-18 01:45:35 【问题描述】:

我经常看到代码使用!!condition 而不仅仅是常规条件。即:

if(!!value)
    doSomething();

对比:

if(value)
    doSomething();

如果有的话,功能上的区别是什么?一种优于另一种吗?如果有的话,选择使用一种与另一种的条件是什么?

【问题讨论】:

Can someone explain this 'double negative' trick? 的可能重复项 另见How to use the double not (!!) operator in javascript @JonathanNaguin:不,不是。 另见Why use !! to coerce a variable to boolean for use in a conditional expression? 【参考方案1】:

这只是一种更明确的方式来测试一个值的“真实性”。

以下内容会将value“转换”为布尔值。

!!(value)

例如,一个非空字符串

!!"a" // true

另一个空字符串的例子

!!"" // false

但是,如果您只是直接使用测试值

if (value) // ...

那么下面的值是 JavaScript 中的false

0 -0 null ""(空字符串) false undefined NaN

其他所有内容都是true

【讨论】:

在if条件下使用时可能没有意义,但作为返回值使用时,可用于发送布尔值。我认为这应该是公认的答案。【参考方案2】:

技术上没什么。 double bang !! 类型将 value 转换为布尔值 - if 语句在评估 value 时所做的事情。

在您发布的代码中,!! 是无用的,毫无用处。

【讨论】:

【参考方案3】:

!!确保结果类型是布尔值(true 或 false)。

javascript:alert("foo") --> foo

javascript:alert(!"foo") --> 错误

javascript:alert(!!"foo") --> true

javascript:alert(!!null) --> 错误

他们这样做是为了确保 $('row') 不为空。

键入比 $('row') 更短!= null ?真:假。

【讨论】:

以上是关于if(!!condition) 和 if(condition) 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

if(!!condition) 和 if(condition) 有啥区别

if else if cond in mongodb 聚合

C# 条件编译 (#if 和 Conditional)

C# 条件编译 (#if 和 Conditional)

C# 条件编译 (#if 和 Conditional)

python线程之condition