是什么 !! (不是)JavaScript中的运算符?

可紊 提交于 2019-12-03 16:45:24

我看到了一些似乎使用不认识的运算符的代码,它以两个感叹号的形式出现,像这样: !! 。 有人可以告诉我这个操作员做什么吗?

我看到的背景是

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

#1楼

!!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!

#2楼

!! 将其右侧的值转换为其等效的布尔值。 (想想穷人的“类型转换”方式)。 它的目的是通常传达给读者的是,代码不关心什么值是可变的,但它的“真”值是。


#3楼

它将后缀转换为布尔值。


#4楼

这是进行类型转换的令人费解的方法。

! 不是 。 所以!truefalse!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);

#5楼

这是一个双not操作。 第一! 将值转换为布尔值并反转其逻辑值。 第二! 反转逻辑值。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!