Day012

1、按照下列要求,用JavaScript寫一個年,月,日的聯動菜單。
(1)默認顯示當前日期;
(2)選擇年纔可以選擇月,選擇月纔可以選擇日,並且 2 月的天數要正確;
[html] view plain copy
<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>每日一練</title>  
</head>  
<body>  
    <form name="dateInfo">  
            <select name="yearName" οnchange="testYear(this.value)">  
                <option value="">請選擇年</option>  
            </select>  
            <select name="monthName" οnchange="testMonth(this.value)">  
                <option value="">請選擇月</option>  
            </select>  
            <select name="dayName">  
                <option value="">請選擇日</option>  
            </select>  
        </form>  
        <script>  
            // 定義各個月份天數  
            var monthTemp = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];  
            /**  
             * 頁面完成加載完成後執行  
             */  
            window.onload = function() {  
                // 獲取當前年份     
                var yearValue = new Date().getFullYear();  
                // 獲取當前月份  
                var monthValue = new Date().getMonth() + 1;  
                // 以今年爲準,前30年,後30年   
                for(var i = (yearValue - 30); i <= (yearValue + 30); i++) {  
                    document.dateInfo.yearName.options.add(new Option(" " + i + " 年", i));  
                }  
  
                // 月份的下拉框     
                for(var i = 1; i <= 12; i++) {  
                    document.dateInfo.monthName.options.add(new Option(" " + i + " 月", i));  
                }  
  
                // 設定年份  
                document.dateInfo.yearName.value = yearValue;  
                // 設定月份  
                document.dateInfo.monthName.value = monthValue;  
                // 獲取當前月份的天數  
                var dayValue = monthTemp[monthValue - 1];  
                // 初始化日選項框  
                initDay(dayValue, monthValue, yearValue);  
                // 設置當前日  
                document.dateInfo.dayName.value = new Date().getDate();  
            }  
  
            // 年發生變化時日期發生變化  
            function testYear(yearValue) {  
                // 獲取當前月份  
                var monthValue = document.dateInfo.monthName.value;  
                // 判斷月份是否被選中,若未選中,則重置日選項框  
                if(monthValue == "") {  
                    optionsClear(document.dateInfo.dayName);  
                    return;  
                }  
                // 根據月份獲取天數  
                var dayValue = monthTemp[monthValue - 1];  
                // 初始化日選項框  
                initDay(dayValue, monthValue, yearValue);  
            }  
  
            // 月發生變化時日期聯動     
            function testMonth(monthValue) {  
                // 獲取當前年份  
                var yearValue = document.dateInfo.yearName.value;  
                // 判斷年份是否被選中,若未選中,則重置日選項框  
                if(yearValue == "") {  
                    optionsClear(document.dateInfo.dayName);  
                    return;  
                }  
                // 根據月份獲取天數  
                var dayValue = monthTemp[monthValue - 1];  
                // 初始化日選項框  
                initDay(dayValue, monthValue, yearValue);  
            }  
  
            // 初始化日選項框  
            function initDay(dayValue, monthValue, yearValue) {  
                // 判斷是否是2月份,並且判斷是否爲閏年  
                if(monthValue == 2 && isLeapYear(yearValue)) {  
                    dayValue++;  
                }  
                // 獲取當前日下拉框  
                var e = document.dateInfo.dayName;  
                // 重置下拉框  
                optionsClear(e);  
                // 填充日下拉框  
                for(var i = 1; i <= dayValue; i++) {  
                    e.options.add(new Option(" " + i + " 日", i));  
                }  
            }  
  
            // 判斷是否閏平年     
            function isLeapYear(year) {  
                // 閏年的定義是(可被4整除)且((不可被100整除)或(可被400整除))的年份  
                return(year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));  
            }  
  
            // 重置下拉框  
            function optionsClear(e) {  
                e.options.length = 1;  
            }  
        </script>  
</body>  
</html>  
2、常見的幾種約束有哪些?分別代表什麼意思?如何使用?
常用的約束有主鍵約束,外鍵約束,唯一約束,默認約束 。
主鍵:PRIMARY KEY(主鍵字段)保證了實體完整性,一個表只有一個主鍵,但一個主鍵可以包含多個字段,主鍵字段不能爲空;
唯一:UNIQUE(約束字段)保證了實體完整性,一個表有多個唯一約束,一個唯一約束可有包含多個字段;
外鍵:FOREIGN KEY(外鍵字段),保證了引用完整性,一個表可以有多個外鍵;
默認值:DEFAULT(默認值的表達式或NULL),保證了域完整性,一個表可以有多個默認值約束,但是一個字段只有一個默認值。

3、數組(Array)和列表(ArrayList)有什麼區別?什麼時候應該使用 Array 而不是 ArrayList?
(1)存儲內容比較:
Array 數組可以包含基本類型和對象類型,
ArrayList 卻只能包含對象類型。
Array 數組在存放的時候一定是同種類型的元素。ArrayList 就不一定了 。

(2)空間大小比較:
Array 數組的空間大小是固定的,所以需要事前確定合適的空間大小。
ArrayList 的空間是動態增長的,而且,每次添加新的元素的時候都會檢查內部數組的空間是否足夠。

(3) 方法上的比較:
ArrayList 方法上比 Array 更多樣化,比如添加全部 addAll()、刪除全部 removeAll()、返回迭代器 iterator() 等。

適用場景:
如果想要保存一些在整個程序運行期間都會存在而且不變的數據,我們可以將它們放進一個全局數組裏, 但是如果我們單純只是想要以數組的形式保存數據,而不對數據進行增加等操作,只是方便我們進行查找的話,那麼,我們就選擇 ArrayList。
如果我們需要對元素進行頻繁的移動或刪除,或者是處理的是超大量的數據,那麼,使用 ArrayList 就真的不是一個好的選擇,因爲它的效率很低,使用數組進行這樣的動作就很麻煩,那麼,我們可以考慮選擇 LinkedList。
發佈了84 篇原創文章 · 獲贊 0 · 訪問量 3477
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章