【问题标题】:What is the !! operator in javascript? [duplicate]是什么 !! javascript中的运算符? [复制]
【发布时间】:2012-12-29 21:01:36
【问题描述】:

可能重复:
What is the !! (not not) operator in JavaScript?
Can someone explain this ‘double negative’ trick?

因为我在玩 HTML5 视频的可能性,所以我遇到了getUserMedia.js,它提供跨浏览器支持。

在研究该库的工作原理(并试图让它在 requirejs 模块中工作)时,我发现了以下奇怪的 if 构造:

if ( !! navigator.getUserMedia_) {
   ...

双重否定? 这是什么意思,为什么?为什么不简单地使用以下?

if (navigator.getUserMedia_) {
   ...

【问题讨论】:

标签: javascript operators


【解决方案1】:

JavaScript 中的双重否定 !! 只是将值转换为布尔类型。

【讨论】:

  • 但为什么它比第二个构造“更好”。既然 navigator.getUserMedia_ 是(或应该是)一个函数,为什么不使用typeof navigator.getUserMedia_ === 'function'。我的问题不仅是它的含义,而是应该在什么情况下使用它。
  • @asgoth 我不能说这是“更好”。对我来说这是多余的。 !! 只是给你明确的truefalse 值,而if 子句中的条件检查该值是否为假(即不是""0NaNnullundefinedfalse)。因此,在您的示例中,我们可以轻松省略类型转换。
【解决方案2】:

!! 通常用于将变量转换为布尔值(强制布尔上下文)

之所以使用它是因为可以将不同的类型评估为false,例如undefinednull'' 等。

如果你使用:!!undefined,你会得到:

  1. !!undefined
  2. !true
  3. false

通过这种方式,如果在布尔上下文中进行评估,您实际上会得到等于参数的布尔值。

【讨论】:

    【解决方案3】:

    这不是一个运算符,它是两个相同的 (!),它基本上将任何东西转换为布尔值。换句话说,取一个值的双重否定。

    【讨论】:

      猜你喜欢
      • 2017-06-09
      • 2016-08-28
      • 2019-07-01
      • 2011-05-30
      • 2014-03-24
      • 2011-08-08
      • 2016-07-24
      • 2014-03-07
      • 1970-01-01
      相关资源
      最近更新 更多