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

2022-08-29 21:45:42

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

我看到这个的背景是,

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

答案 1

它将转换为 .如果它是假的(例如, , , 等),则它将是 , 否则, .Objectboolean0nullundefinedfalsetrue

!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

答案 2

这是进行类型转换的一种非常晦涩难懂的方法。

!意味着不是。是 和 是 也是如此。 是 和 是 。!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);

// Or just
val.enabled = Boolean(userId);

注意:当涉及到某些边缘情况(例如,当 is 时)时,后两个表达式并不完全等同于第一个表达式,这是由于运算符的工作方式以及哪些值被认为是真实的userId[]!=