什么是!!(不是)JavaScript中的运算符?
2022-08-29 21:45:42
我看到一些代码似乎使用了我不认识的运算符,以两个感叹号的形式出现,就像这样:.有人可以告诉我这个操作员是做什么的吗?!!
我看到这个的背景是,
this.vertical = vertical !== undefined ? !!vertical : this.vertical;
我看到一些代码似乎使用了我不认识的运算符,以两个感叹号的形式出现,就像这样:.有人可以告诉我这个操作员是做什么的吗?!!
我看到这个的背景是,
this.vertical = vertical !== undefined ? !!vertical : this.vertical;
它将转换为 .如果它是假的(例如, , , 等),则它将是 , 否则, .Object
boolean
0
null
undefined
false
true
!object // Inverted Boolean
!!object // Noninverted Boolean, so true Boolean representation
所以不是运营商;它只是操作员两次。!!
!
这样做可能更简单:
Boolean(object) // Boolean
实际示例“测试 IE 版本”:
const isIE8 = !! navigator.userAgent.match(/MSIE 8.0/);
console.log(isIE8); // Returns true or false
如果您⇒
console.log(navigator.userAgent.match(/MSIE 8.0/));
// Returns either an Array or null
但如果你⇒
console.log(!!navigator.userAgent.match(/MSIE 8.0/));
// Returns either 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);
// Or just
val.enabled = Boolean(userId);
注意:当涉及到某些边缘情况(例如,当 is 时)时,后两个表达式并不完全等同于第一个表达式,这是由于运算符的工作方式以及哪些值被认为是真实的。userId
[]
!=