是什么 !! (不)没有运算符在JavaScript中?
我看到一些代码似乎使用了一个我不认识的操作符,以两个感叹号的形式,如下所示: !!
。 有人能告诉我这个操作员做什么吗?
我看到这个背景是,
this.vertical = vertical !== undefined ? !!vertical : this.vertical;
强制oObject
为布尔值。 如果它是假的(例如0, null
, undefined
等),则它将是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
,而!false
是true
。 !0
是true
, !1
是false
。
所以你将一个值转换为布尔值,然后将其反转,然后再次反转。
// 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
返回一个布尔值( true
或false
)。 在非布尔类型上使用它更有意义。 考虑这些例子,特别是第三个例子和以后的例子:
!!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