如何检查NaN javascript的相等性[重复]

Posted

技术标签:

【中文标题】如何检查NaN javascript的相等性[重复]【英文标题】:How to check equality of NaN javascript [duplicate] 【发布时间】:2020-05-13 03:58:32 【问题描述】:

我一直在试图检查的价值和平等类型的NaN,但我得到的错误每次。这似乎是必须有一个简单的解决方案。这是迄今为止,不工作我已经尝试了四种可能的解决方案。另一件事是,在第一溶液中的下划线无法识别上edabit或codepen:

溶液1 H3>
function checkEquality(a, b) 
    if((typeof a === typeof b) ||
          (_.isNaN(a) === true) &&
           (_.isNaN(b) === true)) 
      return true;
  

溶液2 H3>
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 H3>
function checkEquality(a, b) 
  if(((typeof a === typeof b) || (isNaN(parseInt(NaN)))))  
    return true;
  

溶液4 H3>
function checkEquality(a, b) 
  let c = NaN;
  if(((typeof a !== typeof b) || (isNaN(parseInt(c) !== NaN))))  
    return false;
  

【问题讨论】:

javascript有isNaN内置函数。跨度> 这能回答你的问题吗? How do you check that a number is NaN in JavaScript? 【参考方案1】:

检查变量是否不是数字的最佳选择是 isNan() 函数。

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

观察一下就好了:

与 JavaScript 中的所有其他可能值不同,不可能依靠相等运算符(== 和 ===)来确定值是否为 NaN,因为 NaN == NaN 和 NaN === NaN 评估为假。因此,isNaN 函数的必要性。

我不知道您的用例,但考虑到不可能依靠相等运算符(== 和 ===)来确定两个对象是否相等,为此最好的是使用 Object.is() 函数

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

注意:

Object.is() 判断两个值是否相同。如果满足以下条件之一,则两个值相同:

两者都未定义 两者都为空 两者皆为真或皆为假 两个字符串长度相同,字符顺序相同 两个相同的对象(意味着两个对象具有相同的引用) 两个数字和 两个+0 都 -0 两者都是 NaN 或者都非零且都不是 NaN 并且都具有相同的值 这与根据 == 运算符相等不同。 == 运算符在测试相等性之前对双方应用各种强制(如果它们不是相同的类型)(导致 "" == false 为真这样的行为),但 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 并非所有主流浏览器都完全支持。【参考方案2】:

尝试使用 Object.is() 方法。它确定两个值是否相同。如果满足以下条件之一,则两个值相同:

两者未定义

两者都为空

真或都假

两个字符串长度相同,字符顺序相同

两者相同的对象(意味着两个对象具有相同的引用)

数字和

两者 +0

两者 -0

两者 NaN

或既非零又非 NaN 且都具有相同的值

参考以下文档

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:
if (isNaN(x)) 
return 'Not a Number!';

isNaN 是你要找的函数

【讨论】:

以上是关于如何检查NaN javascript的相等性[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 Javascript 中 Unicode 字符串的相等性?

如何在javascript中检查两个数字是不是相等[重复]

在Java中检查三个或更多字符串的相等性[重复]

具有 NaN 相等性比较的 Pandas DataFrames

检查容器中是不是存在 NaN

在 Javascript 中比较 NaN 值是不是相等