如何在Javascript中包含NaN时评估比较?

问题描述 投票:2回答:2

我理解这背后的原因。我对技术实施感到好奇。无法在某个地方找到这个。

我的理论是,只要在任何比较中评估左NaN,它就会自动返回false而根本不进行比较。它是否正确?

javascript nan
2个回答
8
投票

是 - 如果两种类型相同,并且它们是数字,那么如果左边的是NaN,那么结果是false,而不检查正确值的值:

https://www.ecma-international.org/ecma-262/6.0/#sec-strict-equality-comparison

7.2.13严格的平等比较

比较x === y,其中x和y是值,产生真或假。这样的比较如下进行:

如果Type(x)与Type(y)不同,则返回false。

如果Type(x)是Undefined,则返回true。

如果Type(x)为Null,则返回true。

如果Type(x)是Number,那么

  • 如果x是NaN,则返回false。
  • 如果y是NaN,则返回false。
  • 如果x与y的Number值相同,则返回true。
  • 如果x是+0且y是-0,则返回true。
  • 如果x是-0且y是+0,则返回true。
  • 返回false。

...


1
投票

只是为了澄清如何处理。鉴于@ CertainPerformance(正确)答案,我很惊讶,下面的代码导致“a”的值被“覆盖”。

let a = 'overwrite me';

let x = () => {
  a = 'overwritten'; 
  return 7;
}

NaN === x();

alert(a);

但仔细阅读摘录后,我会收集到typeof(x())在幕后调用,这会导致覆盖。

换句话说,这不是一个最完整意义上的短路。

© www.soinside.com 2019 - 2024. All rights reserved.