发送没有参数的函数导致未设置的变量错误

时间:2012-06-18 15:36:30

标签: jquery

我对jQuery的基本理解的Apoligies。我正在尝试编写一个函数,该函数可以由用户设置值或留空,设置自己。它看起来像这样:

// 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未定义'

我该如何解决这个问题?

5 个答案:

答案 0 :(得分: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变量(undefined)的属性(year)而导致的。我建议谷歌有关于IMO的真实性和虚假性,这是该语言的一个非常有用的功能。

答案 1 :(得分: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);   
}

答案 2 :(得分:0)

将其与undefinednull进行比较,而不是检查长度

答案 3 :(得分:0)

使用以下代码检查变量是否未定义:

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

您的代码会抛出错误,因为当您使用.length时,您认为给定的变量存在。

答案 4 :(得分: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);
}

未经测试,但它应该做你想要的。