在JavaScript中不加(!!)vs类型强制

时间:2012-06-10 20:12:26

标签: javascript type-conversion not-operator

除了指示显式转换之外,在JavaScript中使用double not运算符是否有任何优势?它似乎在某些时候,人们似乎喜欢使用双倍检查新API的存在,但我从来没有读过任何优势。

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

我读过的一件事是它是一种简单,模糊的方式来将类型转换为boolean,但是,当在此上下文中使用时,对象将被自动强制转换为boolean,因为我们正在检查它是否是定义

简而言之,为什么人们会在引擎的顶部进行两次布尔操作?

2 个答案:

答案 0 :(得分:7)

我真的没有理由在你出席的情境中这样做。它不会以任何方式影响结果。

我唯一一次认为这是一个好主意,如果你正在构建一个应该返回bool值的函数,你需要从其他值转换它,例如......

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

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

答案 1 :(得分:1)

您无需在!!表达式中使用if 它被用于将值转换为布尔值,if默认执行它。

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

if (x) === if (!!x)