Javascript !undefined 是真的吗?

标签 javascript undefined

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

alert(undefined);
alert(!undefined);

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

最佳答案

Is this the expected behavior.

是的。

If so then why ?Am I missing some concept/theory about undefined in Javascript?

JavaScript 具有值的隐式转换(又名强制值)的概念。当您使用 negation ("NOT") operator (!) ,你要否定的东西必须是 bool 值,所以如果它不是 bool 值,它会将它的参数转换为 bool 值。这样做的规则是 defined by the specification : 基本上,如果值为 undefinednull""00nNaN(在浏览器上也是 document.all¹),它强制转换为 false;否则,它强制为 true

所以 !undefinedtrue 因为 undefined 隐式转换为 false,然后 ! 否定它。

这些值(和 false)统称为 falsy values .其他任何 1 称为 truthy value .这个概念发挥了很多作用,不仅仅是 !,还有 if 和循环中的测试以及某些内置函数的回调返回值的处理像 Array.prototype.filter


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

关于Javascript !undefined 是真的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39075142/

相关文章:

javascript - 需要图像幻灯片放映方面的帮助吗?

javascript - "Defined"数组元素的计数

c++ - 标识符 [字符串值] 未定义

javascript - computeArea() 在 google map api v3 中返回 [object object]

Javascript Promise 返回值

php - 通知 : Undefined index: HTTP_REFERER

javascript - "Undefined"全局变量 - 非常奇怪

php - 错误 : undefined index?

javascript - 使用jquery动画进行div移动

javascript - 无法在 native react 中读取 null 的属性字符串