为了账号安全,请及时绑定邮箱和手机立即绑定

为什么会这样呢

月份向前翻,到2016 就不行了,这么回事呢

正在回答

5 回答

会飞的四脚蛇说得对,代码一开始写的时候这里判断有bug。

0 回复 有任何疑惑可以回复我~

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'){......} ;


2 回复 有任何疑惑可以回复我~
#1

慕莱坞1975833

我的锅
2017-04-20 回复 有任何疑惑可以回复我~

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,望采纳

0 回复 有任何疑惑可以回复我~
#1

会飞的四脚蛇

if( !year && !month){.....}永远不会执行??? 难道我打开的浏览器姿势不对?麻烦输入代码运行一下先。
2017-04-19 回复 有任何疑惑可以回复我~

其实是老师的代码有点小错误。

翻到2017-1,再点month就变为0,

根据老师datepicker.getMonthData的定义,参数判断

 if(!year || !month)
{
    var today = new Date();
    year =today.getFullYear();
    month =today.getMonth() + 1;
}

改为

if( !year && !month){.....}

就可以了。

2 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么会这样呢

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信