課程
/前端開發
/HTML/CSS
/DatePicker組件開發
月份向前翻,到2016 就不行了,這么回事呢
2017-04-18
源自:DatePicker組件開發 5-2
正在回答
會飛的四腳蛇說得對,代碼一開始寫的時候這里判斷有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'){......} ;
慕萊塢1975833
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){.....}
就可以了。
舉報
使用原生JS完成一個日期選擇器(datepicker)組件的開發
1 回答這里為什么總是會報錯?
2 回答為什么要設置td寬度為14%呢?
1 回答這里為什么用break
1 回答為什么在datepick.init的時候 datepick.render();沒有傳參數呢
1 回答這個程序我用eclipse中的jsp來寫為什么下面的日歷部分不顯示呢?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2017-04-20
會飛的四腳蛇說得對,代碼一開始寫的時候這里判斷有bug。
2018-05-29
求老鐵們能幫忙解決下,謝謝了
2017-04-19
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'){......} ;
2017-04-19
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-04-19
其實是老師的代碼有點小錯誤。
翻到2017-1,再點month就變為0,
根據老師datepicker.getMonthData的定義,參數判斷
改為
就可以了。