Javascript!undefined给出了真实的?

时间:2016-08-22 08:55:46

标签: javascript undefined

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

alert(undefined);
alert(!undefined);

第一个提醒为undefined,第二个提醒为true。 这是预期的行为吗?如果是,那么为什么?我在Javascript中错过了关于undefined的一些概念/理论吗?

3 个答案:

答案 0 :(得分:17)

  

这是预期的行为。

  

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

JavaScript具有强制值的概念。当你使用negation ("NOT") operator (!)时,你要否定的东西必须是一个布尔值,所以如果它不是布尔值的话,将其参数强制布尔值。执行此操作的规则为defined by the specification:基本上,如果值为undefinednull""0NaN,则为强迫false;否则,它会强制true

所以!undefinedtrue,因为undefined强制false,然后!否定它。

这些值(和false)统称为 falsy 值。 (其他任何东西都被称为 truthy 值。)这个概念发挥了很多作用,不只是!,而是&&||,测试if s,作为某些内置函数的回调的返回值等。

答案 1 :(得分:1)

答案 2 :(得分:0)

是的,这是预期的行为。

以下值的否定在javaScript中为true:

  • 未定义
  • 0(数字零)
  • “”(空字符串)

例如:!undefined = true

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

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

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