在JavaScript中使用(!!!)操作符?

在JavaScript中使用(!!!)操作符?,javascript,Javascript,!!运算符显然很有用,因为它强制将非布尔值的内容检查为布尔值-即“真”条件 但是假的呢?你需要使用 一个就足够了:) 一个就足够了:) 这是“真实”条件 不,这是任何价值的将转换其等效布尔值中的任何值 为什么??因为not运算符只返回相反的布尔值。所以 0 // is falsy !0 // -> true !!0 // -> false 'foo' // is truthy !'foo' // -> false !!'foo' // -> tr

!!运算符显然很有用,因为它强制将非布尔值的内容检查为布尔值-即“真”条件


但是假的呢?你需要使用

一个
就足够了:)


一个
就足够了:)

这是“真实”条件

不,这是任何价值的<代码>将转换其等效布尔值中的任何值

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

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

'foo'    // is truthy
!'foo'   // -> false
!!'foo'  // -> true
任何附加应用程序都将再次切换该值。因此
相当于
相当于
等等

var boolCheck = 0;
   boolCheck //0
  !boolCheck //true
 !!boolCheck //false
!!!boolCheck //true - again
这是“真实”条件

不,这是任何价值的<代码>将转换其等效布尔值中的任何值

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

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

'foo'    // is truthy
!'foo'   // -> false
!!'foo'  // -> true
任何附加应用程序都将再次切换该值。因此
相当于
相当于
等等

var boolCheck = 0;
   boolCheck //0
  !boolCheck //true
 !!boolCheck //false
!!!boolCheck //true - again
这里也一样:

var boolCheck = 1;
   boolCheck //1
  !boolCheck //false
 !!boolCheck //true
!!!boolCheck //false - again
没有理由使用这个(!!!),这是一个同义反复在以下情况下非常有用:

  • 当有一些结果时,我们需要一个布尔值(!!5=>true)
  • 我们需要用缩短false!1正确-!0
  • 或者跳过包装器
  • 这里也一样:

    var boolCheck = 1;
       boolCheck //1
      !boolCheck //false
     !!boolCheck //true
    !!!boolCheck //false - again
    
    没有理由使用这个(!!!),这是一个同义反复在以下情况下非常有用:

  • 当有一些结果时,我们需要一个布尔值(!!5=>true)
  • 我们需要用缩短false!1正确-!0
  • 或者跳过包装器

  • 本身不是运算符;这只是使用JavaScript的逻辑NOT(
    )操作符的一种方式

    要将
    x
    转换为布尔值,
    !!x
    之所以起作用,是因为当对布尔值求反两次时,得到的是原始布尔值,
    !x
    在求反之前将
    x
    转换为布尔值


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

    本身不是运算符;这只是使用JavaScript的逻辑NOT(
    )操作符的一种方式

    要将
    x
    转换为布尔值,
    !!x
    之所以起作用,是因为当对布尔值求反两次时,得到的是原始布尔值,
    !x
    在求反之前将
    x
    转换为布尔值


    同样,
    !!!x
    x
    转换为布尔值并对其求反三次,这相当于只对其求反一次。所以你可以使用
    !x
    而不是
    !!!这完美地回答了你的问题

    !!!x可能是一个布尔转换的倒数!!x:

    var myBool = Boolean("false");  // == true
    
    var myBool = !!"false";  // == true
    
    “任何非空字符串的计算结果均为true”

    所以
    !!!“假”;/==错误

    这个问题不是开玩笑。例如:

    function ok(value, message) {
      if (!!!value) fail(value, true, message, '==', assert.ok);
    }
    assert.ok = ok;
    
    编辑:我认为他们这样做是出于代码可读性的原因,出于习惯,因为

    编辑:我不知道为什么我5天前下载的Node.js版本仍然存在!!!价值而不是价值!GitHub中的值


    编辑:。

    这完美地回答了您的问题

    !!!x可能是一个布尔转换的倒数!!x:

    var myBool = Boolean("false");  // == true
    
    var myBool = !!"false";  // == true
    
    “任何非空字符串的计算结果均为true”

    所以
    !!!“假”;/==错误

    这个问题不是开玩笑。例如:

    function ok(value, message) {
      if (!!!value) fail(value, true, message, '==', assert.ok);
    }
    assert.ok = ok;
    
    编辑:我认为他们这样做是出于代码可读性的原因,出于习惯,因为

    编辑:我不知道为什么我5天前下载的Node.js版本仍然存在!!!价值而不是价值!GitHub中的值



    编辑:。

    !将值转换为反布尔值(如果为真,则变为假;如果为真,则变为真)
    !瓦尔===!!!val
    用于任何val@Simon:我从未见过
    ==
    。假设你的意思是严格比较,那么布尔运算怎么会是比较的对立面呢?这个问题不是开玩笑吗?@GuilhermeSehn你应该澄清一下!值就足以进行布尔转换。!将值转换为反布尔值(如果为真,则变为假;如果为真,则变为真)
    !瓦尔===!!!val
    用于任何val@Simon:我从未见过
    ==
    。假设你的意思是严格比较,那么布尔运算怎么会是比较的对立面呢?这个问题不是开玩笑吗?@GuilhermeSehn你应该澄清一下!值对于布尔转换就足够了。不,如果某个值返回为未定义的值就不足够了!!强制将未定义的转换为true。@安东帕格:你确定吗?一个
    似乎很好,至少在我的浏览器中是这样。@antonpug好的,你发布的链接只表明我是对的!!在未定义时将永远不会返回true。仅有一个的将任何值转换为布尔值并对其应用NOT操作,第二!只需再应用一个。不,如果返回的内容未定义,则不适用!!强制将未定义的转换为true。@安东帕格:你确定吗?一个
    似乎很好,至少在我的浏览器中是这样。@antonpug好的,你发布的链接只表明我是对的!!在未定义时将永远不会返回true。仅有一个的将任何值转换为布尔值并对其应用NOT操作,第二!我只想再申请一个。这个答案是完美的,非常清楚。这个答案是完美的,非常清楚。