如何检查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;
function checkEquality(a, b)
if((typeof a === typeof b) ||
(_.isNaN(a) === true) &&
(_.isNaN(b) === true))
return true;
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;
function checkEquality(a, b)
if(((typeof a === typeof b) || (isNaN(parseInt(NaN)))))
return true;
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 字符串的相等性?