是什么 !! (不)没有运算符在JavaScript中?

我看到一些代码似乎使用了一个我不认识的操作符,以两个感叹号的形式,如下所示: !! 。 有人能告诉我这个操作员做什么吗?

我看到这个背景是,

this.vertical = vertical !== undefined ? !!vertical : this.vertical;

强制oObject为布尔值。 如果它是假的(例如0, nullundefined等),则它将是false ,否则是true

!oObject  //Inverted boolean
!!oObject //Non inverted boolean so true boolean representation

所以!! 不是运营商,它只是! 操作员两次。

真实世界示例“测试IE版本”:

let isIE8 = false;  
isIE8 = !! navigator.userAgent.match(/MSIE 8.0/);  
console.log(isIE8); // returns true or false 

如果你⇒

console.log(navigator.userAgent.match(/MSIE 8.0/));  
// returns null  

但如果你⇒

console.log(!!navigator.userAgent.match(/MSIE 8.0/));  
// returns true or false

这是一种可怕的方式来做类型转换。

! 不是。 所以!true false ,而!falsetrue!0true!1false

所以你将一个值转换为布尔值,然后将其反转,然后再次反转。

// Maximum Obscurity:
val.enabled = !!userId;

// Partial Obscurity:
val.enabled = (userId != 0) ? true : false;

// And finally, much easier to understand:
val.enabled = (userId != 0);

!!expr根据表达式的真实性, !!expr返回一个布尔值( truefalse )。 在非布尔类型上使用它更有意义。 考虑这些例子,特别是第三个例子和以后的例子:

          !!false === false
           !!true === true

              !!0 === false
!!parseInt("foo") === false // NaN is falsy
              !!1 === true
             !!-1 === true  // -1 is truthy

             !!"" === false // empty string is falsy
          !!"foo" === true  // non-empty string is truthy
        !!"false" === true  // ...even if it contains a falsy value

     !!window.foo === false // undefined is falsy
           !!null === false // null is falsy

             !!{} === true  // an (empty) object is truthy
             !![] === true  // an (empty) array is truthy; PHP programmers beware!
链接地址: http://www.djcxy.com/p/205.html

上一篇: What is the !! (not not) operator in JavaScript?

下一篇: shift) operators and how do they work?