首頁  >  文章  >  web前端  >  javascript中Date物件的getDay方法使用指南_javascript技巧

javascript中Date物件的getDay方法使用指南_javascript技巧

WBOY
WBOY原創
2016-05-16 16:25:262055瀏覽

Date物件有個getDay方法,它根據本地時間,傳回一個特定日期中一週的第幾天。回傳值從0~6,分別對應週日~週六

getDay 0 1 2 3 4 5 6
星期幾 週日 週一 週二 週三 週四 週五 週六

用到日期相關的需求時需要將getDay傳回的值轉成星期幾,即「這一天」是星期幾?例如日曆組件中選擇日曆後返回 “2014-12-22 週一”。

這是一段依然在線上運行的程式碼

複製程式碼 程式碼如下:

/*
 * 根據Date物件回傳星期幾
 *  @param {Date} date
 *  @return {String} "星期三"
 */
function getChineseWeekByDate(date) {
    var numWeekDay = date.getDay();
    if (numWeekDay == 0) {
        return '週日';
    } else if (numWeekDay == 1) {
        return '週一';
    } else if (numWeekDay == 2) {
        return '週二';
    } else if (numWeekDay == 3) {
        return '週三';
    } else if (numWeekDay == 4) {
        return '週四';
    } else if (numWeekDay == 5) {
        return '週五';
    } else if (numWeekDay == 6) {
        return '週六';
    } else {
        return '';
    }
}

這段程式碼透過多個if else分支判斷,回傳星期幾,有同學提到可以利用switch優化下

複製程式碼 程式碼如下:

/*
 * 根據Date物件回傳星期幾
 *  @param {Date} date
 *  @return {String} "星期三"
 */
function getChineseWeekByDate(date) {
    var numWeekDay = date.getDay();
    switch (numWeekDay) {
        case 0: return '週日';
        case 1: return '週一';
        case 2: return '週二';
        case 3: return '週三';
        case 4: return '週四';
        case 5: return '週五';
        case 6: return '週六';
        default: return '';
    }
}

比起if/else,程式碼簡且短清晰了不少。有人做過統計程式越短,大腦思考的時間越短。因此你會看到各種《短碼之美》,《代碼簡潔之道》等各種倡導和讚美“短碼”的人和書。

《程式碼大全》提到利用表格驅動法簡化程式設計

表格驅動法 — 表驅動法是一種程式模式(scheme),從表格裡找出資訊而不使用邏輯語句(if和switch)。事實上,凡是能透過邏輯語句來選擇的,都可以透過查表來選擇。對簡單的情況而言,使用邏輯語句更為容易和直白。但隨著邏輯鏈越來越複雜,查表法也越發顯得有吸引力。

上面提到利用表格替代邏輯語句,JS裡有不少前端工程師自從了解了函數式語言的一些特性,就拼命的用表達式消滅語句。如

1. && 替代 單if

複製程式碼 程式碼如下:

if (a == 1) {
    $.ajax(xx)
}
// -->
(a == 1) && $.ajax(xx)

2. ?: 替代 if/else

複製程式碼 程式碼如下:

if (a == 1) {
    $.ajax(xx)
} else {
    $(yy).remove()
}
// -->
(a == 1) ? $.ajax(xx) : $(yy).remove()

3. 多個if/else和switch 也可以用多個「?:」取代

複製程式碼 程式碼如下:

if (a == 1) {
    alert(1)
} else if (a == 2) {
    alert(2)
} else if (a == 3) {
    alert(3)
} else {
    alert(4)
}
// -->
(a == 1)
    ? alert(1) : (a == 2)
    ? alert(2) : (a == 3)
    ? alert(3) : alert(4)

另外,還可以用函數遞歸去消滅for/while語句。開始對這些寫法比較上癮,後來發現自己看不懂了(可能還是看的少,大腦總是自然的又將這些轉換成語句),最後還是習慣用語句。

《代碼大全》裡說的表,我們用一個JS物件來替換試下

複製程式碼 程式碼如下:

/*
 * 根據Date物件回傳星期幾
 *  @param {Date} date
 *  @return {String} "星期三"
 */
function getChineseWeekByDate(date) {
    var numWeekDay = date.getDay();
    var weekObj = {
        '0': '週日',
        '1': '週一',
        '2': '週二',
        '3': '週三',
        '4': '週四',
        '5': '週五',
        '6': '週六',
    };
    return weekObj[numWeekDay] ||  '';
}

比起switch,又減了不少程式碼,但還有0~6字樣的key存在。 getDay方法傳回的從0開始恰好和JS陣列索引一樣也是從0開始。因此用數組可以再簡化下

複製程式碼 程式碼如下:

/*
 * 根據Date物件回傳星期幾
 *  @param {Date} date
 *  @return {String} "星期三"
 */
function getChineseWeekByDate(date) {
    var numWeekDay = date.getDay();
    var weekArr = ['週日', '週一','週二','週三','週四','週五','週六'];
    return weekArr[numWeekDay] ||  '';
}
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn