如何修复testDateTime函数中的“i is not defined”错误?
修复JavaScript日期比较函数的"i is not defined"错误
嘿,咱们先搞清楚为啥会出现i is not defined的报错——问题出在两个函数里对Date.parse()的理解和错误的方法调用上:
错误根源分析
Date.parse()返回的是时间戳(数字类型),不是Date对象。函数1里直接对字符串a/b调用getDay(),函数2里对时间戳aa/bb调用getDay(),这两种操作都不成立——因为字符串和数字都没有getDay()这个方法!这就导致三元表达式的结果是undefined,自然i就成了未定义的变量,触发报错。
修复后的正确实现
我们需要先把输入的日期字符串转换成真正的Date对象,再进行比较和获取星期几:
function testDateTime(a, b){ var arr = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; // 直接将字符串转为Date对象 var dateA = new Date(a); var dateB = new Date(b); // 比较两个Date对象,取较大的那个 var largerDate = dateA > dateB ? dateA : dateB; // 调用getDay()获取星期索引(0=周日,6=周六) var dayIndex = largerDate.getDay(); return arr[dayIndex]; }
为什么这样能解决问题?
new Date(a)会把符合格式的日期字符串转换成Date实例,只有Date对象才能调用getDay()方法。Date对象支持直接用>运算符比较时间先后,内部会自动转换为时间戳进行对比。getDay()返回的0-6正好和我们定义的星期数组的索引一一对应,直接取值就能得到正确的星期字符串。
用你的示例输入测试:testDateTime("19 October 1909 10:27", "28 March 1909 00:59")会返回Tuesday,完全符合预期。
内容的提问来源于stack exchange,提问作者Trulimon
相关产品推荐
相关产品推荐

