如何检查JavaScript中NaN的相等性

3

我一直在尝试检查NaN的值和类型是否相等,但每次都会出现错误。看起来必须有一个更简单的解决方案。到目前为止,我尝试过四种可能的解决方案,但都不起作用。另外一件事是,在第一个解决方案中的下划线在edabit或codepen上无法识别:

解决方案1

function checkEquality(a, b) {
    if((typeof a === typeof b) ||
          (_.isNaN(a) === true) &&
           (_.isNaN(b) === true)) {
      return true;
  }
}

解决方案2

function checkEquality(a, b) {
  let divisionByZod = 42 / "General Zod";
  let valueIsNaN = (divisionByZod !== divisionByZod);

  if((typeof a === typeof b) || (42 / 'General Zod' === true)) {

    return true;
  }
}

解决方案 3

function checkEquality(a, b) {
  if(((typeof a === typeof b) || (isNaN(parseInt(NaN)))))  {
    return true;
  }
}

solution 4

function checkEquality(a, b) {
  let c = NaN;
  if(((typeof a !== typeof b) || (isNaN(parseInt(c) !== NaN))))  {
    return false;
  }
}

3
JavaScript 内置了 isNaN 函数。 - admcfajn
6
这个问题已经有解答了吗?[如何在JavaScript中检查一个数字是否为NaN?] - admcfajn
4个回答

2
检查变量是否不是数字的最佳选项是使用isNan()函数。

https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/isNaN

很好地观察到:
与 JavaScript 中所有其他可能的值不同,无法依赖相等运算符(== 和 ===)来确定一个值是否为 NaN,因为 NaN == NaN 和 NaN === NaN 都会计算为 false。因此,需要使用 isNaN 函数。
我不知道您的用例,但请注意无法依赖相等运算符(== 和 ===)来确定两个对象是否相等,为此最好使用 Object.is() 函数。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is

观察以下内容:

Object.is() 用于确定两个值是否相同。如果满足以下任一条件,则两个值相同:

都是 undefined 都是 null 都为 true 或都为 false 都是长度相同且字符顺序相同的字符串 都是相同的对象(即两个对象具有相同的引用) 都是数字,并且 都是 +0 都是 -0 都是 NaN 或者都是非零值且都不是 NaN,且具有相同的值 这与根据 == 运算符相等不同。== 运算符在测试相等性之前对两侧应用各种强制转换(例如,"" == false 的结果为 true),但 Object.is 不会强制转换任何一个值。

这也与根据 === 运算符相等不同。=== 运算符(以及 == 运算符)将数字值 -0 和 +0 视为相等,并将 Number.NaN 视为不等于 NaN。

知道了这些,我认为 Object.is(a,b) 是您问题的解决方案。

const nan1 = 'a string' / 2
const nan2 = 'another string' / 2
const comparation = Object.is(nan1,nan2)
console.log(comparation) // true


请注意,Object.is 在所有主要浏览器中并不完全支持。 - Marco Antônio

1
尝试使用函数isNaN()。如果值为NaN,则返回true。

1
if (isNaN(x)) {
return 'Not a Number!';
}

isNaN是你要找的函数


0
尝试使用Object.is()方法。它确定两个值是否是相同的值。如果以下任意一个条件成立,则两个值相同:
  • 都是未定义的

  • 都是null

  • 都是true或都是false

  • 都是长度相同、字符顺序相同的字符串

  • 都是相同的对象(指两个对象具有相同的引用)

  • 都是数字且

  • 都是+0

  • 都是-0

  • 都是NaN

或者两个值都非零且都不是NaN并且两个值相等。

请参考以下文档:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接