未捕获的类型错误:无法读取未定义的属性“开始”
Posted
技术标签:
【中文标题】未捕获的类型错误:无法读取未定义的属性“开始”【英文标题】:Uncaught TypeError: Cannot read property 'start' of undefined 【发布时间】:2015-11-01 00:54:11 【问题描述】:我有一个这样的列表,其中包含 1000 多个条目。
[
"start": "Sun May 24 2015 01:00:00 GMT+0530 (IST)",
"end": "Sun May 24 2015 01:30:00 GMT+0530 (IST)",
"title": "Event 1"
,
"start": "Sun May 24 2015 04:00:00 GMT+0530 (IST)",
"end": "Sun May 24 2015 06:00:00 GMT+0530 (IST)",
"title": "Event 2"
]
我正在写一个像这样的函数:-
function finalIndex(ind)
var final_ind = ind+1;
var chkdate = new Date(list[ind].start);
var day = chkdate.getDate();
//alert(day);
var chkdate1 = new Date(list[final_ind].start);
var day1 = chkdate.getDate();
//alert(day1);
final_ind = final_ind+1;
while(day == day1)
chkdate1 = new Date(list[final_ind].start);
day1 = chkdate.getDate();
final_ind = final_ind+1;
final_ind = final_ind-1;
return final_ind;
在这个函数中 ind 是给定日期的起始索引,在这个函数的帮助下,我想找出与给定日期关联的最终对象的索引。
外部的注释警报运行正常,并显示 24,24 作为输出。
但是我得到 Uncaught TypeError: Cannot read property 'start' of undefined 虽然它能够读取 list[final_ind].start 在循环之前。
【问题讨论】:
final_ind = final_ind+1;
将导致 while 循环内的 final_ind
与 while 循环外的 final_ind
不同。这可能会导致数组查找返回 undefined。
没有得到你...???我在 chkdate1 = new Date(list[final_ind].start);在while循环内。
final_ind = final_ind+1;
while(day == day1)
chkdate1 = new Date(list[final_ind].start);
我只是增加了 var final_ind
【参考方案1】:
只需更改:
while(day == day1)
到:
while(day == day1 && list[final_ind])
或:
while(day == day1 && list.length > final_ind)
解释:
最后一个循环越界了,添加这个你确定对象存在。
【讨论】:
现在错误消失了,但现在 while 循环一直持续到最后,尽管我只有 10 个日期 = 24 的条目; 要获得您想要的结果,请将循环内的行day1 = chkdate.getDate();
更改为 day1 = chkdate1.getDate();
。
HeartBeat 是对的,我第一眼没看到。【参考方案2】:
当您的函数在最后一个索引上运行时,您的 final_ind = ind+1
分配一个不存在的索引,当它到达 chkdate1=new Date(list[final_ind].start)
时,它会抛出一个错误,因为该项目不存在。通过将此行添加为函数的第一个行来检查您是否位于最后一项,从而避免这种情况:if(ind >= list.length-1) return
。
无论如何。我正在阅读您的代码,我个人认为您需要重新思考并重新编写您想要实现的目标。这没有多大意义,而且有很多冗余。
【讨论】:
嗯,你可以提出更好的方法来做到这一点。这对像我这样的初学者会有很大帮助。 我认识我的朋友。我想回答这个问题,但发现太多了。我没有时间提出那么多建议,而是重新考虑了这一点。希望有人可以帮助你更多。现在我很着急:(对不起。以上是关于未捕获的类型错误:无法读取未定义的属性“开始”的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的类型错误:无法读取未定义的属性“ContentContainer”[关闭]