8

我从表单中获取数值。然后我检查它是否是NaN。如果它是一个数字,我想将该值设置为一个变量。问题是当我输入一个有效数字时,我仍然会收到警报,并且该数字没有传递给变量“日期”。我应该如何修改我的声明,以便当它是一个有效数字时,我可以将它分配给可变日期?

var adate = document.getElementById("dueDate").value;    

    if ( adate == NaN || " ") {
    alert("Please enter a due date");
    return;
    }

    else {
    var date = (new Date()).setDate(adate);
    }

    processDate(date);
4

4 回答 4

18

使用 Javascript 的isNaN()函数。

根据 IEEE 的标准,用 NaN 检查相等性总是错误的。决定这一点的 IEEE-754 委员会成员斯蒂芬·佳能 (Stephen Canon) 有一个很好的答案来解释这一点

于 2013-02-26T18:51:44.127 回答
9

尽管看起来很奇怪,NaN !== NaN.

if (adate !== adate || adate !== " ") {
  //...
}

isNaN功能在很多情况下都可以使用。不过,有一个很好的理由证明它已经坏了

解决此问题的一种好方法是:

MyNamespace.isNaN = function (x) {
  return x !== x;
}
于 2013-02-26T18:51:12.197 回答
4

你可以使用if( isNaN(adate))

祝你好运

于 2014-09-22T07:15:12.633 回答
4

你这里有两个问题。结果是条件总是通过。这就是它的作用:

adate == NaN // first, test if adate == NaN (this always returns false)
||           // if the first test fails (i.e. always), carry on checking
" "          // test if the string " " is truthy (this always returns true)

做两个单独的||检查。它不会测试是否adate是“要么NaN" "”,这似乎是您所期望的。

您的代码不妨说

if ( true ) {

但是,如果您尝试了两个比较,您将能够解决这个问题:

if ( (adate == NaN) || (adate === " ")) {

然而,正如其他人所说,这不起作用,因为NaN !== NaN. 所以解决方案是使用isNaN

if (isNaN(adate) || (adate === " ")) {
于 2013-02-26T18:57:04.347 回答