8

フォームから数値を取得しています。次に、それが NaN かどうかを確認します。数値の場合、その値を変数に設定します。問題は、有効な数値を入力してもアラートが表示され、その数値が変数「日付」に渡されないことです。有効な数値の場合に変数 date に割り当てることができるように、ステートメントをどのように変更すればよいですか?

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委員会のメンバーであるStephenCanonは、これを説明する優れた回答をここに持っています。

于 2013-02-26T18:51:44.127 に答える
9

奇妙なことに、NaN !== NaN

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

このisNaN関数は多くの場合に機能します。とはいえ、壊れているというのは良いケースです

これを回避する1つの良い方法は次のとおりです。

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

ここで 2 つの問題があります。その結果、条件は常にパスします。これはそれが何をするかです:

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)

||2 つの個別のチェックを行います。「どちらか」かどうかはテストされませが、これは期待どおりのようです。adateNaN" "

あなたのコードは言うかもしれません

if ( true ) {

ただし、2 つの比較を試みれば、これを整理することができます。

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

ただし、他の人が言ったように、これは機能しませんNaN !== NaN。したがって、解決策は次を使用することisNaNです:

if (isNaN(adate) || (adate === " ")) {
于 2013-02-26T18:57:04.347 に答える
4

あなたが使用することができますif( isNaN(adate))

幸運を

于 2014-09-22T07:15:12.633 に答える