使用的目的是什么!!在这种情况下?

时间:2011-11-09 10:29:31

标签: javascript

请参阅http://webmail.mac.com来源。

  B.incompatible = !!(B.msie < 7 || B.safari < 500 || B.mozilla < 1.008000999);
  B.unsupported  = !!(B.opera || B.safari < 500) && !B.incompatible;
  B.supported    = !B.incompatible && !B.unsupported;

为什么双重“!”用在这里?有什么好处吗?

3 个答案:

答案 0 :(得分:4)

在这种情况下没有意义,因为表达式无论如何都已经评估为布尔值。这可能只是一个程序员“更加确定”。

答案 1 :(得分:2)

逻辑NOT运算符(&#34;!&#34;)用于将true转换为false,反之亦然。

! true // expresses false
! false // expresses true

然而,它也强迫价值观。非零数字和非空字符串都是真的。所以他们变得虚假。

! 1.0 // expresses false
! 0.0 // expresses true
! '@' // expresses false
! '' // expresses true

使用两个NOT将其转换回原始布尔值。

!! 1.0 // expresses true
!! 0.0 // expresses false
!! '@' // expresses true
!! '' // expresses false

它相当于调用布尔构造函数。但是,它更快(没有函数调用开销),更短,更可读。

!! 1.0 === Boolean(1.0) // expresses true

答案 2 :(得分:0)

这是一种非常聪明的铸造方式。