慕函数2567878
2017-04-18 13:42
月份向前翻,到2016 就不行了,这么回事呢
会飞的四脚蛇说得对,代码一开始写的时候这里判断有bug。
求老铁们能帮忙解决下,谢谢了
if( !year && !month){.....}永远不会执行???
难道我打开的浏览器姿势不对?麻烦输入代码运行一下先。
你确定理解 && 和 || 的用法?两个都是短路操作。
&& :第一个运算数的值为真则返回第二个运算数的值,否则返回第一个运算数的值。
if( !year && !month),除了第一次,其他都是短路操作,直接返回 !year的值,即false. !month 根本不会执行;
|| :第一个运算数的值为真则返回第一个运算数的值,否则返回第二个运算数的值。
if (typeof year==='undefined'|| typeof month==='undefined') ,先检查typeof year==='undefined'再检查 typeof month==='undefined',除了第一次是短路操作,其他每次都要在检查typeof month==='undefined'。从效率来讲你的方法限定死了参数检查,代码冗余!!!!无谓的运算是可以优化的。
在说if(!year || !month)为什么就不行呢,因为!year 除了第一次运行是true,其他基本都是false。除了第一次,这个条件判断总是返回 !month 的值,当 month为0时 !month--> !0--> true,会执行这个条件判断后面的语句,即返回当前月份的数据。
结论:if( !year && !month){.......} 优于if (typeof year==='undefined'|| typeof month==='undefined'){......} ;
if (typeof year==='undefined'|| typeof month==='undefined') {
var today = new Date();
year = today.getFullYear();
month = today.getMonth() + 1;
}
使用typeof检查才正确,使用这个if( !year && !month){.....}永远不会执行,因为每次点的时候不会出现年份为0,但是月份会出现0,!0===true,所以你往前切换的时候才会bug,望采纳
其实是老师的代码有点小错误。
翻到2017-1,再点month就变为0,
根据老师datepicker.getMonthData的定义,参数判断
if(!year || !month) { var today = new Date(); year =today.getFullYear(); month =today.getMonth() + 1; }
改为
if( !year && !month){.....}
就可以了。
DatePicker组件开发
17743 学习 · 64 问题
相似问题