5

除了指示显式转换之外,在 JavaScript 中使用双非运算符有什么好处吗?似乎这些天来,人们喜欢使用 double not 检查新 API 的存在,但我从来没有读过它的任何优点。

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

我读过的一件事是,这是一种将类型强制转换为布尔值的简洁、晦涩的方法,但是,当在这种情况下使用时,对象将自动强制转换为布尔值,因为我们正在检查它是否已定义。

简而言之,为什么人们要在引擎之上进行两次布尔运算?

4

2 回答 2

7

我真的看不出有任何理由在你现在的情况下这样做。它不会以任何方式影响结果。

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

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

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

于 2012-06-10T20:17:26.227 回答
1

您不需要!!if表达式中使用。
它被用于将值转换为布尔值,并且if默认情况下会这样做。

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

if (x) === if (!!x)
于 2012-06-10T20:15:27.327 回答