【问题标题】:What logic is behind NaN evaluation? [duplicate]NaN 评估背后的逻辑是什么? [复制]
【发布时间】:2014-07-15 12:22:29
【问题描述】:

你能解释一下javascript中NaN的逻辑评估吗?

NaN==NaN   (false)
!NaN==!NaN (true)
NaN!=NaN   (true)
NaN==false (false)
NaN==true  (false)

我有点惊讶...

【问题讨论】:

  • 对于这类事情的幽默看法,请参阅https://www.destroyallsoftware.com/talks/wat
  • 究竟对什么感到惊讶?
  • @FelixKling - JS 在布尔逻辑中实现了三个值:true、false 和 falsy
  • @JanTuroň:那是什么意思?也许我对 SLaks 答案的评论澄清了这一点。

标签: javascript nan logical-operators


【解决方案1】:

因为规范是这么说的。

具体来说,IEE 浮点规范说 NaN 不等于自身。
因此,在 Javascript 中,没有任何值可以与 NaN 相等。

!NaNtrue,因为 NaN 是一个假值。

这使您的所有示例都很明显。

【讨论】:

  • 好的,但是我应该如何理解这种价值的否定呢?我的脑袋好痛……
  • 它还暗示 !NaN == false (false) 和 !NaN == true (true) 什么是真的
  • @JanTuroň:使用! 的结果是一个布尔值。所以如果你使用!NaN==!NaN ,那么你是在与布尔值进行比较,而不是NaN。如果这就是你的意思。将一个值转换为布尔值和将一个值与另一个值进行比较是两件不同的事情。仅仅因为!NaNtrue 并不意味着NaN == false(那是因为NaN 在这个过程中没有被转换为布尔值)。
猜你喜欢
  • 2017-10-17
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 2021-01-14
  • 1970-01-01
  • 2014-05-06
  • 2012-01-18
  • 1970-01-01
相关资源
最近更新 更多