Javascript !undefined 是真的吗?

新手上路,请多包涵

当我尝试警告对具有 undefined 值的变量的否定时,我得到的输出是真的吗?

 alert(undefined);
alert(!undefined);

第一个警报给出 undefined ,第二个警报给出 true 。这是预期的行为吗?如果是这样,那为什么?我是否在 Javascript 中遗漏了一些关于 undefined 的概念/理论?

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

阅读 346
2 个回答

这是预期的行为吗?

是的。

如果是这样,那为什么?我是否遗漏了一些关于 Javascript 中未定义的概念/理论?

JavaScript 具有值的 _隐式转换_(又名 _强制值_)的概念。当您使用 否定(“NOT”)运算符( ! 时,您要否定的东西必须是布尔值,因此如果它的参数不是布尔值,它会将其转换为布尔值。 The rules for doing that are defined by the specification : Basically, if the value is undefined , null , "" , 0 , 0n , or NaN (also document.all on browsers¹), it coerces to false ;否则,它会强制转换为 true

So !undefined is true because undefined implicitly converts to false , and then ! negates it.

这些值(和 false )统称为 虚假。其他任何 1 都称为 。这个概念发挥了很多作用,不仅在 ! 中,而且在 if 中的测试和循环以及某些内置函数的回调返回值的处理,如 Array.prototype.filter


¹ document.all 在浏览器上是虚假的,即使它是一个对象,并且所有(其他)对象都是真实的。如果您对……有趣的……历史感兴趣,请查看我最近出版的《JavaScript:新玩具》一书的第 17 章。基本上,这是为了避免网站不必要地使用非标准、过时的功能。

原文由 T.J. Crowder 发布,翻译遵循 CC BY-SA 4.0 许可协议

是的,这是预期的行为。

以下值的否定在 javaScript 中给出 true:

  • 错误的
  • 不明确的
  • 无效的
  • 0(数字零)
  • “”(空字符串)

例如:!undefined = true

注意: 当您 == 将其与 false 进行比较时,以下检查返回 true,但它们的否定将返回 false。

  • “”(仅限空格)。
  • [ ](空数组),

例如:[ ] == false 给出 true,但是 ![ ] 给出 false

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

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