【问题标题】:Is !!!foo the same as !foo? [duplicate]!!!foo 和 !foo 一样吗? [复制]
【发布时间】:2020-04-10 01:25:11
【问题描述】:

知道!!foo 为您提供了foo 的布尔值,我看到一些程序员说最好使用!!!foo 而不是!foo,因为您首先将其更改为布尔值,然后取反价值。

所以我的问题是,

!!!foo 是否总是等于!foo? (!!!foo === !foo)

【问题讨论】:

  • 这很愚蠢。 ! 的单个应用程序会将值转换为布尔值并导致逻辑否定。结果是总是truefalse。没有理由再申请两次!
  • 是的。 (还有一些字母,因为评论有最小长度)。
  • 我知道这很愚蠢,我只是想问一下以确保...有些人不认为这是同一件事
  • 这是一个特别优柔寡断的布尔值,它害怕在生活中做出艰难的决定。
  • 虽然这可能是一个有点愚蠢的问题,但逻辑不是实际上是 JS 中为数不多的事情之一,在第一步之后,不允许任何语言滥用甚至接近改变结果。有一些方法可以得到,例如a !== a 工作,如果结果是字符串(甚至更好的对象),你可以做一些奇怪的事情,但布尔不是,没有机会。

标签: javascript


【解决方案1】:

我从未见过在实际代码中使用!!!foo,但是是的,它们总是严格相等的。

额外的两个感叹号只是两次否定布尔值,总是给出相同的结果。

【讨论】:

    【解决方案2】:

    虽然您是对的,!!!foo 等于 !foo,但我之前从未见过使用 !!!foo 的 JS 脚本,我想不出这样做的充分理由。如果您在自己的代码中编写此代码,就会产生代码异味。

    换句话说,不要那样做。

    【讨论】:

      【解决方案3】:

      如果 foo 设置为布尔值,则 !foo 将等于 !!!foo ,请参见下面给出的示例和屏幕截图

      var foo = true;
      
      console.log('foo => '+foo);
      console.log('!foo => '+!foo);
      console.log('!!foo => '+!!foo);
      console.log('!!!foo => '+!!!foo);
      console.log('!!!!foo => '+!!!!foo);
      if(!!!foo === !foo){
        console.log("Equals");
      }else{
        console.log("Not Equals");
      }
      

      【讨论】:

      • foo 甚至不需要是布尔值,这适用于所有foo
      【解决方案4】:

      是的。只是为了清楚起见:

      !!x === x 通常不为真,但如果x 已经是布尔值,则为真:“非(非真)”为真,“非(非假)”为假。

      !foo 始终是布尔值;如果foo 为真,则为false,否则为true

      因此,如果您将!foo 替换为x,您会发现!!(!foo) === (!foo) 总是正确的。去掉括号并不会改变意思,所以!!!foo === !foo 总是正确的。

      这意味着没有充分的理由在实际代码中编写!!!foo。只需改用!foo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-09
        • 1970-01-01
        • 2010-12-12
        • 1970-01-01
        • 2021-03-19
        • 1970-01-01
        相关资源
        最近更新 更多