2

我经常看到使用!!condition与常规条件相反的代码。IE:

if(!!value){
    doSomething();
}

相对:

if(value){
    doSomething();
}

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

4

3 回答 3

9

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

在您发布的代码中,这!!是无用的,没有任何用途。

于 2013-11-06T17:23:11.830 回答
7

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

以下将“强制转换”value为布尔值。

!!(value)

例如,一个非空字符串

!!"a" // true

另一个空字符串的例子

!!"" // false

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

if (value) // ...

那么以下值false在 JavaScript 中

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

其他的都是true

于 2013-11-06T17:23:03.820 回答
1

这 !!确保结果类型是布尔值(真或假)。

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

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

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

javascript:alert(!!null) --> false

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

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

于 2013-11-06T17:22:55.163 回答