使用JavaScript函数与方法计算年龄:代码问题排查与解决
解决JavaScript计算年龄函数返回undefined的问题
我来帮你排查代码里的问题,一步步修复就能得到正确结果了:
问题1:函数没有返回值
你的calculateAge函数最后没有用return返回计算好的age,所以调用它的时候默认返回undefined,这是最直接导致alert输出undefined的原因。
问题2:Date对象创建错误
你写的new Date(calculateAge)完全没用到传入的参数,正确的做法是用传入的year, month, day来创建日期对象,注意:JavaScript的Date构造函数里月份是0索引的(0=1月,3=4月),所以要把传入的month参数减1,否则你传入04会被解析成5月。
问题3:日期获取方法错误
getDay()返回的是一周中的第几天(0=周日,6=周六),你需要获取的是当月的具体日期,应该用getDate()方法。
修正后的完整代码
let calculateAge = function(day, month, year){ // 注意月份要减1,因为Date的月份是0-11 var myBirthDate = new Date(year, month - 1, day); var myBirthYear = myBirthDate.getFullYear(); var myBirthMonth = myBirthDate.getMonth(); var myBirthDay = myBirthDate.getDate(); // 用getDate()代替getDay() let currentDate = new Date(); let currentYear = currentDate.getFullYear(); let currentMonth = currentDate.getMonth(); let currentDay = currentDate.getDate(); // 同样用getDate() var age = currentYear - myBirthYear; var ageMonth = currentMonth - myBirthMonth; var ageDay = currentDay - myBirthDay; // 判断是否还没到今年的生日,没到的话年龄减1 if (ageMonth < 0 || (ageMonth === 0 && ageDay < 0)) { age -= 1; } // 一定要返回计算好的年龄 return age; }; alert(calculateAge(24, 04, 1993)); // 现在会正确输出对应年龄
额外说明
- 调用函数时传入的
04其实是数字4,没问题,但如果是字符串"04"也一样能被Date正确解析(不过减1的步骤还是必须的)。 - 这个逻辑已经能处理生日还没到的情况,比如今天是4月23日,用户生日是4月24日,就会返回上一年的年龄。
内容的提问来源于stack exchange,提问作者Shreeyog Rajopadhye
相关产品推荐
相关产品推荐

