请参阅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;
为什么双重“!”用在这里?有什么好处吗?
答案 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)
这是一种非常聪明的铸造方式。