2012-06-10 38 views
5

除了指示明确的转换,在JavaScript中使用double not运算符还有什么优点吗?现在看来,似乎这些日子里,人们喜欢使用double来检查新API的存在,但我从未读过任何优势。double not(!!)vs JavaScript中的类型强制

if(!!window.File) 
    // The File API is supported. 
else 
    // Your browser sucks. 

,我已阅读的一件事是,它是类型转换为布尔一个简洁的,模糊的方式,然而,在这种情况下使用时,物体会被自动强制为布尔反正,因为我们正在检查到看看它是否被定义。

总之,为什么人们在引擎上做两个布尔运算?

+0

正如链接所示,它全局地转换为布尔值。这里主要是为了使代码更具可读性,这意味着只需要布尔值。 –

+0

我确切地知道什么!伪操作符,这不是我问的。 – Vreenak

+2

没有真正的用途,这是一个习惯可读性差的坏习惯。 –

回答

7

我真的没有看到有任何理由在你上下文中做这件事。它不会以任何方式影响结果。

只有当我看到这是一个好主意的时候,如果你正在构建一个应该返回一个bool值的函数,并且你需要从其他值中抛出它,例如...

function isNotFalsy(val) { return !!val; } 

这个例子可能有点被迫,但你明白了。你总是希望确保返回值是用户期望的类型。

+0

接受为最佳,希望指出@Pointy一些API可能===/typeof要求布尔值。 – Vreenak

1

您不需要在if表达式中使用!!
它正在使用将值转换为布尔值,并且if默认使用它。

var x = ""; // a falsy value 
!x // true 
!!x // false 

if (x) === if (!!x) 
+0

感谢您的回答,但我知道这一点。问题在于如果在if语句中使用它,是否有任何优势,因为这是很常见的做法。 – Vreenak

+2

@watkinsj。我相信我在第一行回答了这个问题... – gdoron

+0

你说这是没有必要的。我在这个问题中指出了这一点。我没有看到任何关于if语句内的扩散的优点和解释。 – Vreenak