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

新手上路,请多包涵

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

我看到这个的背景是,

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

原文由 Hexagon Theory 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 737
2 个回答

它将 Object 转换为 boolean 。如果它是错误的(例如, 0nullundefined 等),则为 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

原文由 stevehipwell 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

! 表示 _不_。所以 !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);

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

原文由 Tom Ritter 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏