Javascript ReferenceError:未定义日期

Javascript ReferenceError:未定义日期,javascript,date,Javascript,Date,这里有一些代码,我从“adate”表示的表单中获取一个值。然后我将用户在连字符处输入的字符串拆分,并将每个值分隔为年、月和日,如您所见。我使用这些值来定义日期对象。我的控制台正确地显示了日期,但我不断地发现这个错误。我对日期的定义有误吗?我不确定是什么问题 function getFormData() { var task = document.getElementById("task").value; if (checkInputText(task, "Please enter

这里有一些代码,我从“adate”表示的表单中获取一个值。然后我将用户在连字符处输入的字符串拆分,并将每个值分隔为年、月和日,如您所见。我使用这些值来定义日期对象。我的控制台正确地显示了日期,但我不断地发现这个错误。我对日期的定义有误吗?我不确定是什么问题

function getFormData() {
    var task = document.getElementById("task").value;
    if (checkInputText(task, "Please enter a task")) return;

    var who = document.getElementById("who").value;
    if (checkInputText(who, "Please enter a person to do the task")) return;

    var adate = document.getElementById("dueDate").value;
    var reString = new RegExp("[0-9]{4}\\-\[0-9]{2}\\-\[0-9]{2}");

    if ( adate.match(reString)) {
    processDate(adate) } 

    else {
     alert("you did not enter the date in the correct format")
    };

    var id = (new Date()).getTime();
    var todoItem = new Todo(id, task, who, date);
    todos.push(todoItem);
    addTodoToPage(todoItem);
    saveTodoItem(todoItem);

    hideSearchResults();
}    


function processDate(adate) {
     var splitArray = new Array();
     splitArray = adate.split("-");
     var year = splitArray[0];
     var month = splitArray[1] - 1;
     var day = splitArray[2];
     var date = new Date(year, month, day);
     console.log(date);
    }

使函数返回日期,因为其中的
date
变量对外不可见:

function processDate(adate) {
    var splitArray = new Array();
    splitArray = adate.split("-");
    var year = splitArray[0];
    var month = splitArray[1] - 1;
    var day = splitArray[2];
    return new Date(year, month, day);
}
然后在调用新变量时将其赋值:

var date = processDate(adate);
错误实际上起源于以下行,因为您引用的是一个不存在的
date
变量:

var todoItem = new Todo(id, task, who, date);

使函数返回日期,因为其中的
date
变量对外不可见:

function processDate(adate) {
    var splitArray = new Array();
    splitArray = adate.split("-");
    var year = splitArray[0];
    var month = splitArray[1] - 1;
    var day = splitArray[2];
    return new Date(year, month, day);
}
然后在调用新变量时将其赋值:

var date = processDate(adate);
错误实际上起源于以下行,因为您引用的是一个不存在的
date
变量:

var todoItem = new Todo(id, task, who, date);
只是一个评论

通常只有在动态生成表达式时才需要RegExp构造函数。在有固定表达式的地方,使用文字更简单(因为不必引用某些字符)。另外,要测试格式,更合适的方法是
test
,而不是
match

如果日期格式为:yyyy-mm-dd,请考虑:

var reString = /^\d{4}-\d\d-\d\d$/; // trim leading and trailing white space?

if (reString.test(adate)) {
  processDate(adate);
}
日期字符串验证应该在
processDate
函数中,根据格式是否错误或日期是否无效(例如2013-02-29,它将在当前代码中返回2013-03-01的日期),该函数可能会引发不同的错误。

只是一个注释

通常只有在动态生成表达式时才需要RegExp构造函数。在有固定表达式的地方,使用文字更简单(因为不必引用某些字符)。另外,要测试格式,更合适的方法是
test
,而不是
match

如果日期格式为:yyyy-mm-dd,请考虑:

var reString = /^\d{4}-\d\d-\d\d$/; // trim leading and trailing white space?

if (reString.test(adate)) {
  processDate(adate);
}

日期字符串验证应在
processDate
函数中,根据格式是否错误或日期是否无效(例如2013-02-29,它将在当前代码中返回2013-03-01的日期),该函数可能会引发不同的错误。

能否添加示例输入内容?ie“12-5-80”或其他什么?date对象还包含字符串:
newdate('01/01/2013')
错误并非来自您发布的代码。顺便说一句,var splitArray=newarray()是无用的,
.split()
返回一个新的数组对象,因此
var splitArray=adate.split(“-”)减少了不必要的开销。@elclanrs::-)您能给我们看一下异常的堆栈跟踪吗?对我来说,它似乎不是来自发布的代码。你能添加你的示例输入看起来像什么吗?ie“12-5-80”或其他什么?date对象还包含字符串:
newdate('01/01/2013')
错误并非来自您发布的代码。顺便说一句,var splitArray=newarray()
是无用的,
.split()
返回一个新的数组对象,因此
var splitArray=adate.split(“-”)减少了不必要的开销。@elclanrs::-)您能给我们看一下异常的堆栈跟踪吗?在我看来,它似乎不是来自张贴的代码。