【问题标题】:Using the (!!!) operator in JavaScript? [duplicate]在 JavaScript 中使用 (!!!) 运算符? [复制]
【发布时间】:2013-11-23 11:33:53
【问题描述】:

!!运算符显然很有用,因为它强制检查不是布尔值的东西作为布尔值 - 那是“真”条件。

但是假的呢?需要用!!!?

【问题讨论】:

  • !将一个值转换为逆布尔值(如果它是真的,它变成假,假的它变成真的)
  • !val === !!!val 用于任何 val 值
  • @Simon:我从未见过====。假设您的意思是严格比较,那么布尔运算如何与比较相反?
  • 这个问题不是不是开玩笑吗?
  • @GuilhermeSehn 您应该澄清 !value 足以进行布尔转换。

标签: javascript


【解决方案1】:

一个! 就足够了:)

!1 // false
!0 // true

【讨论】:

  • 不,如果某些东西返回为未定义,则不会。 !!强制将 undefined 转换为 true。
  • @antonpug:你确定吗? jsfiddle.net/kkf7Y 单个 ! 似乎工作得很好,至少在我的浏览器中是这样。
  • @antonpug 好的,您发布的链接仅表明我是对的。 !!永远不会在未定义时返回 true。单身的 !将任何值转换为布尔值并对其应用 NOT 操作,第二个!只会再应用一个 NOT。
【解决方案2】:

!! 本身不是运算符;它只是使用 JavaScript 的逻辑 NOT (!) 运算符的一种方式。

要将x 转换为布尔值,!!x 有效,因为当您将布尔值取反两次时,您会得到原始布尔值,而!x 在取反之前将x 转换为布尔值。

同样,!!!xx 转换为布尔值并取反三次,相当于只取反一次。所以你可以使用!x 而不是!!!x

【讨论】:

  • 这个答案很完美,很清楚。
【解决方案3】:

这是“真”条件。

不,它适用于任何价值。 !! 会将任何值转换为等效的布尔值。

为什么?因为 not 运算符只是返回相反的布尔值。所以

0    // is falsy
!0   // -> true
!!0  // -> false

'foo'    // is truthy
!'foo'   // -> false
!!'foo'  // -> true

任何其他应用程序只会再次切换该值。因此!!! 等价于!!!!! 等价于!! 等等。

【讨论】:

    【解决方案4】:
    var boolCheck = 0;
       boolCheck //0
      !boolCheck //true
     !!boolCheck //false
    !!!boolCheck //true - again
    

    同样的事情:

    var boolCheck = 1;
       boolCheck //1
      !boolCheck //false
     !!boolCheck //true
    !!!boolCheck //false - again
    

    没有理由使用这个(!!!),这是一个重言式。 !! 在以下情况下很有用:

    1. 我们需要一个布尔值,当有一些结果时(!!5 => true);
    2. 我们需要将 false 缩短为 !1true - !0
      1. 或跳过包装器。

    【讨论】:

      【解决方案5】:

      这完美回答了你的问题https://stackoverflow.com/a/264037/1561922

      !!!x 可能正在反转布尔转换 !!x:

      var myBool = Boolean("false");  // == true
      
      var myBool = !!"false";  // == true
      

      “任何不为空的字符串都将评估为真”

      所以!!!"false"; // == false

      这个问题不是开玩笑。 Node.js (downloaded 5 days ago) uses this in Assert.js 例如:

      function ok(value, message) {
        if (!!!value) fail(value, true, message, '==', assert.ok);
      }
      assert.ok = ok;
      

      编辑:我认为他们这样做是出于习惯的代码可读性原因,因为!value already suffices

      编辑:Node changed it. 我不知道为什么我 5 天前下载的 Node.js 版本仍然使用 !!!value 而不是 GitHub 中的 !value。

      编辑:This is the reason why.

      【讨论】:

        猜你喜欢
        • 2019-10-06
        • 2013-05-06
        • 2018-02-09
        • 2011-02-22
        • 2013-10-09
        • 1970-01-01
        • 2021-11-15
        • 2016-07-24
        • 2014-03-07
        相关资源
        最近更新 更多