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