当我尝试警告变量具有undefined
值的否定时,我得到输出为真?
alert(undefined);
alert(!undefined);
第一个提醒为undefined
,第二个提醒为true
。
这是预期的行为吗?如果是,那么为什么?我在Javascript中错过了关于undefined
的一些概念/理论吗?
答案 0 :(得分:17)
这是预期的行为。
是
如果是,那么为什么?我在Javascript中遗漏了一些关于未定义的概念/理论吗?
JavaScript具有强制值的概念。当你使用negation ("NOT") operator (!
)时,你要否定的东西必须是一个布尔值,所以如果它不是布尔值的话,将其参数强制布尔值。执行此操作的规则为defined by the specification:基本上,如果值为undefined
,null
,""
,0
或NaN
,则为强迫false
;否则,它会强制true
。
所以!undefined
是true
,因为undefined
强制false
,然后!
否定它。
这些值(和false
)统称为 falsy 值。 (其他任何东西都被称为 truthy 值。)这个概念发挥了很多作用,不只是!
,而是&&
,||
,测试if
s,作为某些内置函数的回调的返回值等。
答案 1 :(得分:1)
是的,没错。 undefined
是 falsy 值。
答案 2 :(得分:0)
是的,这是预期的行为。
以下值的否定在javaScript中为true:
例如:!undefined = true
注意:当您==将其与false进行比较时,以下检查会返回true,但它们的否定将返回false。
例如:[] == false给出true,但是![]给出错误