前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【JS实用技巧篇】03-封装思想

【JS实用技巧篇】03-封装思想

作者头像
好吃懒洋洋
发布2022-11-15 17:11:08
2.3K0
发布2022-11-15 17:11:08
举报
文章被收录于专栏:个人学习分享个人学习分享

📖JavaScript专栏:📑js实用技巧篇 👊👊👊该专栏博主会持续更新,目的是给大家分享一些常用实用技巧,同时巩固自己的基础,共同进步✨✨✨ 💡💡💡欢迎大家在评论区留言交流技术以及学习方法、心得方面的问题。💡💡💡 👇🏻👇🏻👇🏻你的一键三连是对我的最大支持❤️❤️❤️

文章目录

📑前言

该篇主要是针对初学者,培养编程思想当中的——抽象思维,即能抽取关键信息,聚焦重点,而我们本篇所讲的封装思想便是这种思想的一部分,通常需要经过长期锻炼才能达到根深蒂固的程度,所以需要慢慢理解并加以实践——多敲

📑主要内容

📃随机数or字符串获取

  • 随机数获取
代码语言:javascript
复制
/**
 * 得到一个指定范围内的随机整数
 * @param {number} min 范围的最小值
 * @param {number} max 范围的最大值
 * @return {number} 范围内的随机整数
 */
function getRandom(min, max) {
    return Math.floor(Math.random() * (max - min ))+min;
}

**代码分析:**上面随机数获取函数的封装有一定局限性,只可以取到最小值,而无法取到最大值;但return Math.floor(Math.random() * (max - min +1))+min;可取到两端;但个人认为考虑到数学中的概率性,假设获取某范围内的随机数,则不能超出其范围,即获取该闭区间[min,max]的任一值的概率不是均等的;若此处+1虽然保证两端最值都可获取,但超出该范围获取随机数,则该[min,max]获取任一数的概率均等;所以按实际情况而定

常用的Math方法归纳:

API

含义

备注

Math.PI

得到圆周率π

Math.abs()

求某个数绝对值

传入一个数

Math.ceil()

向上取整

传入一个数

Math.floor()

向下取整

传入一个数

Math.max()

求一个数列中的最大值

把数列依次传入

Math.min()

求一个数列中的最小值

把数列依次传入

Math.random()

得到一个0-1之间的随机小数

无参;无法取到1

Math.round()

返回四舍五入的结果

传入一个数

  • 随机字符串获取
代码语言:javascript
复制
function getRandom(min, max) {
  return Math.floor(Math.random() * (max - min)) + min;
}
/**
 * 得到一个指定长度的随机字符串
 * 字符串包含:数字、字母
 * @param {number} length 字符串的长度
 * @return {number} 随机字符串
 */
function getRandomString(length) {
  const result = "";
  const characters =
    "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  for (let i = 0; i < length; i++) {
    const index = getRandom(0, characters.length);
    result += characters[index];
  }
  return result;
}

主要思想:随机字符串获取函数其实就是将要获取的数据存储在数组当中,然后再通过前面封装好的获取随机数函数来随机获取数组当中的数据

📃三个函数搞定dom获取及创建

  • 新旧API对比

以前获取dom的方式:

API

含义

备注

document.getElementById()

根据元素 id 获取 dom

得到单个 dom

document.getElementsByTagName()dom.getElementsByTagName()

根据元素名称获取 dom

得到 dom 的伪数组

document.getElementsByClassName()dom.getElementsByClassName()

根据元素类样式获取 dom

得到 dom 的伪数组

H5以后获取dom方式

API

含义

备注

document.querySelector()dom.querySelector()

根据 CSS 选择器获取 dom

得到第一个匹配的 dom

document.querySelectorAll()dom.querySelectorAll()

根据 CSS 选择器获取 dom

得到所有匹配的 dom伪数组

自此,dom节点的获取变得十分简单,但有时我们会大量使用获取dom的API,为了简化代码,我们对其API进行了如下封装

代码语言:javascript
复制
function $(selector) {
  return document.querySelector(selector);
}

function $$(selector) {
  return document.querySelectorAll(selector);
}

function $$$(selector) {
  return document.createElement(selector);//创建dom节点
}
  • 实用小技巧:

仅限在broswer控制台调试时,可以直接用 代替dom.querySelector(),代替dom.querySelectorAll(),下面展示了浏览器控制台对的使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

📃时间格式化

  • GMT和UTC

世界划分为24个时区,北京在东8区,格林威治在0时区

在这里插入图片描述
在这里插入图片描述

GMT:Greenwish Mean Time 格林威治世界时;太阳时,精确到毫秒

UTC:Universal Time Coodinated 世界协调时;以原子时间为计时标准,精确到纳秒

国际标准中,已全面使用UTC时间,而不再使用GMT时间

GMT和UTC时间在文本表示格式上是一致的,均为星期缩写, 日期 月份 年份 时间 GMT,例如:

代码语言:javascript
复制
Sun, 23 Aug 2020 08:08:08 GMT

注意:GMT、UTC都表示的是零时区的时间

  • Unix 时间戳

Unix 时间戳(Unix Timestamp)是Unix系统最早提出的概念

它将UTC时间1970年1月1日凌晨作为起始时间,到指定时间经过的秒数(毫秒数)

  • 常用日期API

Date()构造函数:

代码语言:javascript
复制
new Date(); // 得到一个当前日期对象
new Date(value); // 根据时间戳得到一个日期对象
new Date(dateString); // 根据一个标准日期字符串得到一个日期对象
new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]); // 根据年、月、日、小时、分钟、秒、毫秒得到一个日期对象

API

含义

备注

Date.now()

得到当前时间戳

无参

Date.prototype.getFullYear()

得到年

无参;本地时间;

Date.prototype.getMonth()

得到月

无参;本地时间;范围0-11

Date.prototype.getDate()

得到日

无参;本地时间;

Date.prototype.getHours()

得到小时

无参;本地时间;

Date.prototype.getMinutes()

得到分钟

无参;本地时间;

Date.prototype.getSeconds()

得到秒

无参;本地时间;

Date.prototype.getMilliseconds()

得到毫秒

无参;本地时间;

Date.prototype.toLocaleString()

得到日期本地的表示方式

  • 时间格式化
代码语言:javascript
复制
/**
 * 传入某一时刻的时间戳,返回当前具体时间
 * @param {Number} timestamp 时间戳
 * @returns 格式化时间
 */
function formatDate(timestamp) {
  const date = new Date(timestamp);
  const year = date.getFullYear();
  const month = (date.getMonth() + 1).toString().padStart(2, "0");
  const day = date.getDate().toString().padStart(2, "0");
  const hour = date.getHours().toString().padStart(2, "0");
  const minute = date.getMinutes().toString().padStart(2, "0");
  const second = date.getSeconds().toString().padStart(2, "0");
  return `${year}年${month}月${day}日${hour}:${minute}:${second}`;
}
console.log(formatDate(23423423423));

输出:

在这里插入图片描述
在这里插入图片描述

主要思想:根据传入的时间戳创建一个Date对象,然后再分别获取当前时间对象的年月日…如:date.getFullYear()获取的结果是number类型,所以我们将其转换成string类型以便能使用padStart(),对不足两位的用“0”进行占位。另外,各位有没有发现.toString().padStart(2, "0")这一部分重复了很多次,那我们就可以对其封装,如果你早已发现,那么恭喜你封装思想已经初步成形

📑总结

看完本篇可能对封装思想有了一定了解,但要想达到真正透彻的地步还需在敲中去切身感受… ​

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-10-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 📑前言
  • 📑主要内容
    • 📃随机数or字符串获取
      • 📃三个函数搞定dom获取及创建
        • 📃时间格式化
        • 📑总结
        相关产品与服务
        数据保险箱
        数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档