NaN比较是否真实?

时间:2015-04-21 12:47:02

标签: javascript nan

最后几天我读到了NaN总是比较自己的错误以及如何比较NaN可能发生的事情,现在我做了一个比较两个NaN的JS。 WTF?还是我比较'NaN'字符串?

http://www.bksys.at/bernhard/JS-NaN-compare-true.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>radioactivity calculator</title>
</head>

<body>

<form name="form1">
a: <input type="text" name="a"><br>
b: <input type="text" name="b"><br>
x: <input type="text" name="x"><br>

</form>

<script type="text/javascript">

    document.form1.a.value=Math.sqrt(-1);
    document.form1.b.value=(1/0)/(1/0);
    document.form1.x.value=(document.form1.a.value==document.form1.b.value);

</script>

</body>
</html>

3 个答案:

答案 0 :(得分:3)

您确实将字符串"NaN"与另一个字符串"NaN"进行比较,这等同于true。文本value元素中保存的input始终作为String类型提取。

解决此问题的一种简单方法是使用Unary Plus (+) operator为您的值添加前缀,将它们转换为整数值(您也可以删除这些括号):

document.form1.x.value = +document.form1.a.value == +document.form1.b.value;

实施例

&#13;
&#13;
document.form1.a.value = Math.sqrt(-1);
document.form1.b.value = (1/0) / (1/0);
document.form1.x.value = +document.form1.a.value == +document.form1.b.value;
&#13;
<form name="form1">
  a: <input  type="text" name="a" size="20" value="a"><br>
  b: <input  type="text" name="b" size="20" value="b"><br>
  x: <input  type="text" name="x" size="20" value="x"><br>
</form>
&#13;
&#13;
&#13;


注意: 正如RobG在下面的评论中指出的那样,重要的是要注意将字符串值"NaN"转换为具有Unary Plus运算符的整数将其直接转换为NaN,因为该字符串无法复制为数值。如果您的input个元素都包含值"Foo",或者甚至包含两个完全不同的非数字字符串值,则会发生同样的情况。虽然此解决方案确实有效,但如果您要扩展此代码以处理非数字值,则可能会产生不希望的结果。

答案 1 :(得分:0)

这是一个JavaScript陷阱;)

比较NaN的正确方法是使用isNaN方法。

var a = 'a' + 5; //NaN

if (isNaN(a)) {
    //do something
}

答案 2 :(得分:-1)

NaN是JavaScript中的特殊值。它甚至不等于自己(也是一种快速的测试方法):

var a = parseInt('seven');
if (a == a) {
    alert("a == a"); 
} else {
    alert("a != a"); // This will happen
}
if (a == 'NaN') {
    // Won't happen
} else {
    alert("NaN is not equal to the string 'NaN'"); // Here
} 

http://jsfiddle.net/u951v90o/