Javascript!undefined给出了真实的?

Man*_*ena 8 javascript undefined

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

alert(undefined);
alert(!undefined);
Run Code Online (Sandbox Code Playgroud)

第一个警报给出undefined,第二个警报给出true.这是预期的行为吗?如果是这样,为什么呢?我undefined在Javascript中错过了一些概念/理论吗?

T.J*_*der 19

这是预期的行为吗?

是.

如果是这样,为什么?我错过了一些关于Javascript中未定义的概念/理论吗?

JavaScript具有强制值的概念.当你使用否定("NOT")运算符(!)时,你要否定的东西必须是一个布尔值,所以如果它已经不是布尔值,它会强制它的参数为布尔值.被做的规则由规范定义的:基本上,如果该值是undefined,null,"",0,或NaN,它胁迫到false; 否则,它会强迫true.

所以!undefined是true因为undefined强迫false,然后!否定它.

总的来说,这些值(和false)被称为假值.(还有什么叫做truthy值.)这个概念开始发挥作用了很多,不只是用!,但&&,||在测试ifS,作为回调特定的内置功能等的返回值