2

jQueryの基本的な理解についてお詫びします。ユーザーが値を設定するか、空白のままにして、自分自身を設定できる関数を作成しようとしています。次のようになります。

// Calendar
function eventCalendar(yearSet, monthSet) { 

    // Get current date
    var date = new Date();

    // Check to see if variables were set in function

    // Year
    if ((yearSet.length > 0)) {
            var year = yearSet;
        } else {
            var year  = date.getFullYear();
        }

    // Month
    if ((monthSet.length > 0)) {
            var month = monthSet;
        } else {
            var month = date.getMonth();
        }

    console.log(month + ', ' + year);   
}

ただし、関数が変数なしで呼び出されると、コンソールにエラーが表示されます。

'yearSet は定義されていません'

どうすればこれを回避できますか?

4

5 に答える 5

1

パラメータが明示的に定義されていないかどうかを確認するのではなく、パラメータの真偽を確認できます。

function eventCalendar(yearSet, monthSet) { 
  var date = new Date();
  var year = yearSet && yearSet.length ? yearSet : date.getFullYear();
  var month = monthSet && monthSet.length ? monthSet : date.getMonth();
  console.log(month + ', ' + year);   
}

参考までに、現在のエラーは、変数 ( )lengthのプロパティ ( )にアクセスしようとしたことが原因で発生しました。JavaScript IMO の真実性と偽りについて Google に問い合わせることをお勧めします。これは言語の非常に便利な機能です。undefinedyear

于 2012-06-18T15:40:15.253 に答える
1
if(yearSet && yearSet.length) {
   //..
}

このようにメソッドを単純化できます。

function eventCalendar(yearSet, monthSet) { 
  var date = new Date();
  //if yearSet is present it will get that or else from new Date
  var year = yearSet || date.getFullYear();
  //if monthSet is present it will get that or else from new Date
  var month = monthSet || date.getMonth();

  console.log(month + ', ' + year);   
}
于 2012-06-18T15:42:05.780 に答える
0

また、「 」は、フィールドに含める有効な値と見なされることも考慮してください。もう少しセクシーなことをしたい:

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

function eventCalendar (y,m) {
  var date = new Date(); 
  y=(isNumber(y) ? y : date.getFullYear(); 
  m=(isNumber(m) ? m : date.getMonth(); 
  console.log(m + " " + y);
}

テストされていませんが、必要に応じて実行する必要があります。

于 2012-06-18T15:43:48.030 に答える
0

次のコードで変数が未定義かどうかを確認します。

if(typeof(variable) === 'undefined') {
    // var is undefined
}

.length使用すると、指定された変数が存在すると想定されるため、コードはエラーをスローします。

于 2012-06-18T15:41:14.347 に答える
0

長さをチェックする代わりに、undefinedまたは比較しますnull

于 2012-06-18T15:38:04.440 に答える