资讯专栏INFORMATION COLUMN

JavaScript常用工具函数

Chiclaim / 1960人阅读

摘要:深拷贝函数判断子元素是否为对象,如果是,递归复制如果不是,简单复制时间戳转为格式化时间时间戳转为格式化时间时间戳时间格式格式包括年月日年月日时分年月日时分秒示例年月日年月日小于补

1.深拷贝函数

function deepClone(obj) {
  let objClone = Array.isArray(obj) ? [] : {};
  if (obj && typeof obj === "object") {
    for (let key in obj) {
      if (obj.hasOwnProperty(key)) {
        //判断ojb子元素是否为对象,如果是,递归复制
        if (obj[key] && typeof obj[key] === "object") {
          objClone[key] = deepClone(obj[key]);
        } else {
          //如果不是,简单复制
          objClone[key] = obj[key];
        }
      }
    }
  }
  return objClone;
}

2.时间戳转为格式化时间

/**
 * 时间戳转为格式化时间
 * @Author   chenjun
 * @DateTime 2017-11-10
 * @param    {[date]}   timestamp [时间戳]
 * @param    {[string]}   formats   [时间格式]
 */
function formatDate(timestamp, formats) {
    /*
    formats格式包括
    1. Y-M-D
    2. Y-M-D h:m:s
    3. Y年M月D日
    4. Y年M月D日 h时m分
    5. Y年M月D日 h时m分s秒
    示例:console.log(formatDate(1500305226034, "Y年M月D日 h:m:s")) ==> 2017年07月17日 23:27:06
     */
    formats = formats || "Y-M-D";

    var myDate = timestamp ? new Date(timestamp) : new Date();

    var year = myDate.getFullYear();
    var month = formatDigit(myDate.getMonth() + 1);
    var day = formatDigit(myDate.getDate());

    var hour = formatDigit(myDate.getHours());
    var minute = formatDigit(myDate.getMinutes());
    var second = formatDigit(myDate.getSeconds());

    return formats.replace(/Y|M|D|h|m|s/g, function(matches) {
        return ({
            Y: year,
            M: month,
            D: day,
            h: hour,
            m: minute,
            s: second
        })[matches];
    });
    // 小于10补0
    function formatDigit(n) {
        return n.toString().replace(/^(d)$/, "0$1");
    };
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108536.html

相关文章

  • JavaScript 是如何工作的:解析、抽象语法树(AST)+ 提升编译速度5个技巧

    摘要:无论你使用的是解释型语言还是编译型语言,都有一个共同的部分将源代码作为纯文本解析为抽象语法树的数据结构。和抽象语法树相对的是具体语法树,通常称作分析树。这是引入字节码缓存的原因。 这是专门探索 JavaScript 及其所构建的组件的系列文章的第 14 篇。 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 如果你错过了前面的章节,可以在这里找到它们: JavaS...

    raoyi 评论0 收藏0
  • JavaScript 工作原理之十四-解析,语法抽象树及最小化解析时间的 5 条小技巧

    摘要:事实是只是部分语言的不同表示法。基于这些,解析器会进行立即或者懒解析。然而,解析器做了完全不相关的额外无用功即解析函数。这里不解析函数,该函数声明了却没有指出其用途。所以之前的例子,解析器实际上 原文请查阅这里,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland。 本系列持续更新中,Github 地址请查阅这里。 这是 JavaScript 工作原理的第十四章。 概...

    ZweiZhao 评论0 收藏0
  • JavaScript 工作原理之十四-解析,语法抽象树及最小化解析时间的 5 条小技巧

    摘要:事实是只是部分语言的不同表示法。基于这些,解析器会进行立即或者懒解析。然而,解析器做了完全不相关的额外无用功即解析函数。这里不解析函数,该函数声明了却没有指出其用途。所以之前的例子,解析器实际上 原文请查阅这里,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland。 本系列持续更新中,Github 地址请查阅这里。 这是 JavaScript 工作原理的第十四章。 概...

    xuxueli 评论0 收藏0
  • JavaScript 工作原理之十四-解析,语法抽象树及最小化解析时间的 5 条小技巧

    摘要:事实是只是部分语言的不同表示法。基于这些,解析器会进行立即或者懒解析。然而,解析器做了完全不相关的额外无用功即解析函数。这里不解析函数,该函数声明了却没有指出其用途。所以之前的例子,解析器实际上 原文请查阅这里,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland。 本系列持续更新中,Github 地址请查阅这里。 这是 JavaScript 工作原理的第十四章。 概...

    jsliang 评论0 收藏0
  • 前端每周清单半年盘点之 JavaScript

    摘要:前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点分为新闻热点开发教程工程实践深度阅读开源项目巅峰人生等栏目。背后的故事本文是对于年之间世界发生的大事件的详细介绍,阐述了从提出到角力到流产的前世今生。 前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点;分为新闻热点、开发教程、工程实践、深度阅读、开源项目、巅峰人生等栏目。欢迎...

    Vixb 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<