javascript中Date对象的getDay方法使用指南

 更新时间:2014年12月22日 08:55:07   投稿:hebedich   我要评论
这篇文章主要介绍了javascript中Date对象的getDay方法使用以及各种优化方案,非常不错的文章,这里推荐给大家。

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] ||  '';
}

相关文章

  • javascript 特殊字符串

    javascript 特殊字符串

    js字符串中出现任何< >标签都可以,就是不能出现</script>标签。
    2009-02-02
  • javascript 后加载,加载完页面再加载

    javascript 后加载,加载完页面再加载

    网页打开的顺序都是按页面从上到下的顺序加载完成的,所以要想使不影响页面打开速度,就要等页面全部打开完成后,再加载JS代码。
    2010-11-11
  • js获取微信版本号的方法

    js获取微信版本号的方法

    本文给大家分享的是使用javascript实现判断微信版本号以及判断是否在内置的微信浏览器中打开的代码,十分的简单实用,有需要的小伙伴可以参考下。
    2015-05-05
  • JavaScript实现的简单幂函数实例

    JavaScript实现的简单幂函数实例

    这篇文章主要介绍了JavaScript实现的简单幂函数,实例分析了javascript实现幂运算的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • Postman模拟发送带token的请求方法

    Postman模拟发送带token的请求方法

    下面小编就为大家分享一篇Postman模拟发送带token的请求方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • js判断ie方法集锦(含正则)代码短小经典

    js判断ie方法集锦(含正则)代码短小经典

    javascript 判断是否是ie,是否是特定版本 ,方法比较多,正则代码比较段
    2008-07-07
  • 对javascript继承的理解

    对javascript继承的理解

    昨天读了关于javascript继承的几篇文章,对原型链、construct、this有了新的认识
    2016-10-10
  • 原生JS查找元素的方法(推荐)

    原生JS查找元素的方法(推荐)

    下面小编就为大家带来一篇原生JS查找元素的方法(推荐)。小编觉得挺不错的,希望对大家有所帮助。一起跟随小编过来看看吧,祝大家游戏愉快哦
    2016-11-11
  • js使用onmousemove和onmouseout获取鼠标坐标的方法

    js使用onmousemove和onmouseout获取鼠标坐标的方法

    这篇文章主要介绍了js使用onmousemove和onmouseout获取鼠标坐标的方法,涉及javascript操作鼠标事件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • js中async函数结合promise的小案例浅析

    js中async函数结合promise的小案例浅析

    这篇文章主要介绍了js中async函数结合promise的小案例浅析,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-04-04

最新评论