一个神奇的Bug

一个神奇的Bug 目前项目是一个非常传统的Web应用,其中有个页面需要用户填写自己的个人信息,包括姓名和出生日期。非常简单的一个小片段,UI看起来是这个样子的: 没有使用现成的datepicker,某个开发人员只是简单的自己收集了一下年,月,日信息,然后在JavaScript中根据填写的值来new了一个Date对象。 然后某天我在做测试的时候,顺手填写了一个日期1986年5月4日,然后奇怪的事情发生了: WTF?,这日期怎么会是非法的呢?于是我又尝试了1986年5月3日和1986年5月5日,一切正常!好奇之下,我找到对应的代码: var dobDay = parseInt($("#personal\\.dobDay").val(), 10); var dobMonth = parseInt($("#personal\\.dobMonth").val(), 10); var dobYear = parseInt($("#personal\\.dobYear").val(), 10); // Note month is not zero based. var dob = null; if (dobDay > 0 && dobMonth > 0 && dobYear > 0) { dob = new Date(dobYear, dobMonth - 1, dobDay, 0, 0, 0, 0); } if (dob === null || dob.getDate() !== dobDay) { valid = false; $("#dob-error").html(this.formMessages.invalidDate); } 从界面上获取用户输入的年,月,日信息,然后根据这三个数字创建一个JavaScript对象。但是奇怪的是,这里有一条判断dob....

September 4, 2014 · 2 min · 邱俊涛 | Juntao Qiu