对象不为 null,也不未定义.更好的是 - 双重反转'!!' 或 JavaScript 中的严格等价性 '!=='

Object is not null and not undefined. What is better - double inversion `!!` or strict equillity `!==` in JavaScript

本文关键字:JavaScript 未定义 null 更好 对象      更新时间:2023-09-26

我们经常检查我们的对象是否不为空且未定义。我总是使用条件if (obj !== null && obj !== undefined)。几天前,我的同事向我展示了双反转!!的语法,现在我可以使用条件if (!!obj)。此语法较少。

我不是一个只学习js的人,但我有一点兴趣。

那么这两种对象验证方式之间有什么区别吗?性能差异?语义差异?有什么区别吗?

没有任何

特别好的理由使用if (!!obj),因为它等同于if (obj)。 但是,!!objobj !== null && obj !== undefined不同的事情,您应该使用最合适的方法。

  • obj !== null && obj !== undefined(惊喜,惊喜)导致nullundefined false
  • !!obj会导致任何虚假的false,包括nullundefined''0NaNfalse
!!foo用于

强制将值强制转换为其布尔值。根据我的经验,这通常用于想要为包含敏感数据的值返回布尔值的 API。例如,要返回是否输入了密码,您可以说return !!password而不是return password

继续说,对于您能想到的许多价值观,if (!!obj)if (obj !== null && obj !== undefined)不同!比如false.