0
<button onclick="isleap(1992)">Try it</button>​

function isleap(year);
{
var yr=document.getElementById("year").value;
if ((parseInt(yr)%4) == 0)
{
 if (parseInt(yr)%100 == 0)
 {
 if (parseInt(yr)%400 != 0)
 {
 alert("Not Leap");
 return "false";
 }
  if (parseInt(yr)%400 == 0)
  {
  alert("Leap");
    return "true";
    }
  }
  if (parseInt(yr)%100 != 0)
  {
    alert("Leap");
    return "true";
  }
 }
 if ((parseInt(yr)%4) != 0)
 {
    alert("Not Leap");
    return "false";
 } 
}

</ p>

http://jsfiddle.net/kcyCd/

うるう年の回答を含むアラートボックスをポップアップするコードを取得する方法を理解するのに問題があります。

4

4 に答える 4

3

簡単なisLeapYear関数は次のとおりです。

function isLeapYear(year) {
  var d = new Date(year, 1, 29);
  return d.getMonth() == 1;
}

2月29日が特定の年に発生するかどうかを確認するだけです。次のことができるはずです。

function isLeapYear2(year) {
  return !!Date.parse(year + '-02-29');
}

無効な日付を解析するとNaNが返されるはずです。これは、falseに型変換されますが、すべてのブラウザが正しく実装されているわけではありませんDate.parse。例えば

isLeapYear2('2001'); // false in Firefox, true in IE
于 2012-11-07T00:10:25.143 に答える
1
<button onclick="alert(isleap(1992));">Try it</button>

isleap関数から返された値を警告すると、機能するはずです。ただし、ポップアップする答えが正しいことを保証するものではありません。

于 2012-11-07T00:09:21.167 に答える
0

関数に値を渡してから、存在しないDOMで別の値を探しています。

また、true / false条件をマージし、ブール値の代わりに文字列を使用しているため、コードを追跡するのは困難です。これは、コード内でif(isleap(1992))が常にtrueになるためです。

簡略化:

function isleap(year)
{
    if(year % 4 == 0 || (year % 100 == 0 && year % 400 == 0)){
        return true;
    }
    return false;
}
于 2012-11-07T00:08:42.107 に答える
0

JSをハンドラーに配置するデフォルトのjsfiddle設定を維持しているため、フィドルは機能しませんonload。つまり、関数はグローバルではなく、インラインonclick属性からアクセスできません。これは、ドロップダウンで変更する必要があります。左側の「ラップなし」設定の1つ。また、関数が呼び出された場合に最初に行うことは、id"year"を持つ要素から値を読み取ろうとすることであり、そのような要素はありません。現在、パラメータを無視していyearます。

そうは言っても、あなたの機能は必要以上に複雑です。parseInt() 最初に1回実行することでコードを大幅に簡略化でき、テストする値が整数でない場合は必要な操作を実行できます。その後、うるう年のテストを1行で実行できます。

また、parseInt()ユーザー入力で使用している場合、先行ゼロで始まる入力が8進数として扱われることによるあいまいなバグを回避するには、2番目のパラメーターとして基数を指定する必要があります。だからparseInt(year, 10)

"true"最後に、なぜ文字列とを返すの"false"ですか?関数を次のように呼び出すことができるように、実際のブール値を返す方が理にかなっています。

if (isleap(1992)) {
   // do something
}

とにかく、ここに短いバージョンがあります:

function isleap(year) {
    year = parseInt(year,10);
    if (isNaN(year)) {
       alert("Not a number");
       return false;
    }
    if (year%4===0 && (year%100!=0 || year%400===0)) {
       alert("Leap");
       return true;
    } else {
       alert("Not leap");
       return false;
    }
}

デモ: http: //jsfiddle.net/kcyCd/1/

アラートを表示する必要がない場合は、アラートをさらに短くすることができます。

function isleap(year) {
    year = parseInt(year,10);
    if (isNaN(year)) {
       alert("Not a number");
       return false;
    }
    return (year%4===0 && (year%100!=0 || year%400===0));
}

そして明らかに、無効な値をテストする必要がなければ、それはワンライナーになります。

于 2012-11-07T00:35:25.620 に答える