〖大前端 - 基础入门三大核心之JS篇(55)〗- 内置对象

  • 说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费如需要项目实战或者是体系化资源,文末名片加V!
  • 作者:哈哥撩编程,十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司担任研发部门CTO。
  • 荣誉:2022年度博客之星Top4、2023年度超级个体得主、谷歌与亚马逊开发者大会特约speaker全栈领域优质创作者

  • 🏆 白宝书系列
    • 🏅 启示录 - 攻城狮的自我修养
    • 🏅 Python全栈白宝书
    • 🏅 ChatGPT实践指南白宝书
    • 🏅 产品思维训练白宝书
    • 🏅 全域运营实战白宝书
    • 🏅 大前端全栈架构白宝书


文章目录

  • ⭐ 包装类
  • ⭐ Math(数学)对象
    • 🌟 Math.round()
    • 🌟 Math.max()和Math.min()
    • 🌟 Math.random()
  • ⭐ Date(日期)对象
    • 🌟 创建日期对象
    • 🌟 日期对象的常见方法
    • 🌟 时间戳
    • 🌟 日期对象案例 - 倒计时

⭐ 包装类

很多编程语言都有“包装类”的设计,包装类的目的就是为了让基本类型值可以从它们的构造函数propotype上获得方法

Number()、String()和Boolean()分别是数字、字符串、布尔值的“包装类”

  • new 包装类()得到的变量的类型是对象,是一种特殊的表现形式。比如一个数字123用包装类进行“包装”,就会得到一个被“包装”了的{123},示例代码如下:
var a = new Number(123);
var b = new String('哈士奇');
var c = new Boolean(true);

console.log(a);
console.log(typeof (a));   // object
console.log(b);
console.log(typeof (b));   // object
console.log(c);
console.log(typeof (c));   // object

image-20231108175652253

  • 包装类new出来的虽然是一个对象,但依然可以像普通类型一样可以进行计算、切片或布尔判断等

示例代码:

var a = new Number(123);
var b = new String('哈士奇');
var c = new Boolean(true);

console.log(2 + a);         // 125
console.log(b.slice(0, 2)); // '哈士'
console.log(c && true);     // true

image-20231109095508031

  • 我们定义一个number类型的变量,它的原型就是Number包装类的prototype。也就是说我们定义的number类型的变量可以看作是Number() new出来的。这就是为什么我们基本类型值可以调用一些内置的方法,比如字符串可以直接调用slice()方法、str()方法等

示例代码:

var d = 123;
console.log(d.__proto__ === Number.prototype);   // true,证明变量d是Number new出来的实例

var e = '哈士奇';
console.log(e.__proto__ === String.prototype);   // true,证明变量e是String new出来的实例

console.log(String.prototype.hasOwnProperty('slice'));   // true

// 因为变量e是String() new出来的实例,所有变量e可以调用String.prototype拥有slice方法
console.log(e.slice(0, 2));   

image-20231109100118808

包装类的目的就是为了让基本类型值可以从它们的构造函数prototype上获得方法,这就是js设计包装类的初衷。

注意,包装类是对基本类型值的面向对象封装,像对array这种复杂类型的封装就不能叫做包装类了,undefined和null是没有包装类的

⭐ Math(数学)对象

🌟 Math.round()

Math.round() 可以将一个数字四舍五入为整数

console.log(Math.round(4.56));      // 5
console.log(Math.round(1.49));      // 1
console.log(Math.round(-12.2345));  // -12

image-20231109101627710

  • 利用Math.round()实现四舍五入到小数点后某位:

image-20231109102827474

示例代码:

var a = 1.2672;
console.log(Math.round(a * 100) / 100);   // 1.27

image-20231109103349872

🌟 Math.max()和Math.min()

Math.max() 可以得到参数列表的最大值

Math.min() 可以得到参数列表的最小值

console.log(Math.max(2, 4, 6, 8));   // 8
console.log(Math.min(2, 4, 6, 8));   // 2

image-20231109103757248

  • 利用Math.max()Math.min()得到数组中的最大值和最小值:

    因为Math.max()Math.min()要求参数必须是“罗列”出来,而不能是数组,我们可以利用apply方法(apply方法可以指定函数的上下文,并且以数组的形式传入“零散值”当作函数的参数),将数组以“零散值”的方式传入函数。

    示例代码:

    var arr = [2, 4, 6, 8];
    console.log(Math.max.apply(null, arr));   // 8
    console.log(Math.min.apply(null, arr));   // 2
    
    // 在ES6中,还可以使用“...”运算符来将数组变成零散值传入函数
    console.log(Math.max(...arr));   // 8
    

    image-20231109104957375

🌟 Math.random()

Math.random() 可以得到0~1之间的小数

为了得到[a, b]区间内的整数,可以使用这个公式:paseInt(Math.random() * (b - a + 1)) - a

// 随机数
console.log(Math.random());
console.log(Math.random());
console.log(Math.random());

// 生成[10~20]之间的整数,公式parseInt(Math.random() * (b - a + 1)) + a
console.log(parseInt(Math.random() * 11) + 10);  

image-20231109105929446

⭐ Date(日期)对象

🌟 创建日期对象

使用new Date() 可以得到当前日期,是object类型值


使用new Date(2024, 12, 1)即可得到指定日期的日期对象,注意:第二个参数表示月份,从0开始算,11表示12月;也可以用new Date(‘2024-12-01’)这样的写法

// 获取当前日期对象
var d_now = new Date();
console.log(d_now);           // 当前时间
console.log(typeof d_now);

// 获取指定日期对象
var d1 = new Date(2024, 2, 1);  // 不算时区
var d2 = new Date('2024-06-01'); // 算时区,我们位于东八区,所以是上午8点
console.log(d1);
console.log(d2);

image-20231109133926137

🌟 日期对象的常见方法

日期对象的常见方法:

方法功能
getDate()得到日期1~31
getDay()得到星期0~6
getMonth()得到月份0~11
getFullYear()得到年份
getHours()得到小时数0~23
getMinutes()得到分钟数0~59
getSeconds()得到秒数0~59

示例代码:

var d = new Date();

console.log('日期', d.getDate());
console.log('星期', d.getDay());
console.log('月', d.getMonth());  // 注意因为月份是从0开始算的,如果得到的是10,则表示现在是11月份
console.log('年份', d.getFullYear());
console.log('时', d.getHours());
console.log('分', d.getMinutes());
console.log('秒', d.getSeconds());

image-20231109135225963

🌟 时间戳

时间戳表示1970年1月1日零点整剧离某个时刻的毫秒数


通过getTime()方法(精确到毫秒)或者Date.parse()函数(精确到毫秒)可以将日期对象变为时间戳


通过new Date(时间戳)的写法,可以将时间戳变为日期对象

示例代码:

var d = new Date();

// 显示时间戳的两种方法
var timestamp1 = d.getTime();       // 方法一,精确到毫秒
var timestamp2 = Date.parse(d);       // 方法二,也是毫秒数,但后三位一定是000

console.log(timestamp1);
console.log(timestamp2);

// 把时间戳变回日期对象
var dd = new Date(timestamp1);
console.log(dd);

image-20231109141731171

时间戳的作用: 如果数据库中只存储一个日期对象,是非常麻烦的,如果存储的是一个时间戳(整数)的方式,就会方便很多,也方便进行运算。比如如果需要比较两个时间的大小,直接转换成时间戳,再用比较运算符进行比较就可以了。

🌟 日期对象案例 - 倒计时

**案例:**在页面上显示距离2024年双十一还有多少天、多少小时、多少分、多少秒。

代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h1>距2024年双十一还有:</h1>
    <h2 id="info"></h2>
    <script>
        var info = document.getElementById('info');
        info.style.color = 'red';

        setInterval(() => {
            // 当前时间对象
            var t1 = new Date();
            // 2024年双十一时间对象
            var t2 = new Date('2024-11-11');

            // 计算差值,得到差值的时间戳
            var diff = t2 - t1;

            // 将时间戳转换成天、时、分、秒
            // 包含多少天?diff除以一天的毫秒数再取整,就是天数
            var days = parseInt(diff / (24 * 60 * 60 * 1000));
            // 包含多少小时?diff和一天的毫秒数取余,余数再除以一小时的毫秒数,再取整,就是小时数
            var hours = parseInt(diff % (24 * 60 * 60 * 1000) / (60 * 60 * 1000));
            // 包含多少分?除去天、小时后的余数再除以一分钟的毫秒数,再取整,就是分钟数
            var minutes = parseInt(diff % (24 * 60 * 60 * 1000) % (60 * 60 * 1000) / (60 * 1000));
            // 包含多少秒?出去天、小时、分钟后的余数再除以1000,就是秒数
            var seconds = parseInt(diff % (24 * 60 * 60 * 1000) % (60 * 60 * 1000) % (60 * 1000) / 1000);

            info.innerText = days + '天' + hours + '小时' + minutes + '分钟' + seconds + '秒';
        }, 1000);
    </script>
</body>

</html>

image-20231109145132381

除了上述的方式外,网上还有很多计算两个时间差值的案例,可以尝试通过不同的方式实现这个功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/251023.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

结构体基础全家桶(2)结构体指针

目录 指向结构体类型数据的指针&#xff1a; 指向结构体变量的指针&#xff1a; 创建&#xff1a; 应用&#xff1a; 注意事项&#xff1a; 指向结构体数组的指针 创建&#xff1a; 应用&#xff1a; 注意&#xff1a; 用结构体变量和指向结构体的指针做函数的参数 …

【Linux】文件系统、文件系统结构、虚拟文件系统

一、文件系统概述 1. 什么是文件系统&#xff1f;2. 文件系统&#xff08;文件管理系统的方法&#xff09;的种类有哪些&#xff1f;3. 什么是分区&#xff1f;4. 什么是文件系统目录结构&#xff1f;5. 什么虚拟文件系统Virtual File System &#xff1f;6. 虚拟文件系统有什…

selenium 与 chromedriver安装

本文章向大家介绍selenium 安装与 chromedriver安装&#xff0c;主要包括selenium 安装与 chromedriver安装使用实例、应用技巧、基本知识点总结和需要注意事项供大家参考。 一、安装selenium 1、Selenium简介 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开…

IDEA配置一个新项目

git clone xxxxx 下载项目主分支 git checkout xxx 切换到需要开发的分支上 配置maven仓库 在File下的Settings中设置maven仓库 配置maven仓库的文件夹 配置好maven后&#xff0c;项目中会出现一个红色的pom.xml文件&#xff0c;右击文件&#xff0c;点击…&#xff0c;pom…

RabbitMq基本使用

目录 SpringAMQP1.准备Demo工程2.快速入门1.1.消息发送1.2.消息接收1.3.测试 3.WorkQueues模型3.1.消息发送3.2.消息接收3.3.测试3.4.能者多劳3.5.总结 SpringAMQP 将来我们开发业务功能的时候&#xff0c;肯定不会在控制台收发消息&#xff0c;而是应该基于编程的方式。由于R…

ArrayList与LinkLIst

ArrayList 在Java中&#xff0c;ArrayList是java.util包中的一个类&#xff0c;它实现了List接口&#xff0c;是一个动态数组&#xff0c;可以根据需要自动增长或缩小。下面是ArrayList的一些基本特性以及其底层原理的简要讲解&#xff1a; ArrayList基本特性&#xff1a; 动…

科大讯飞(深圳)测开面试真题

一面&#xff08;测试组长面&#xff09; 1、上家公司项目以及团队的规模是怎么样的&#xff1f; 2、你负责的项目整体的流程是怎么样的&#xff1f; 3、自动化实施过程中&#xff0c;是如何和业务测试进行沟通的&#xff1f; 4、在上家公司你已经是专职做自动化了&#xf…

会声会影怎么使用? 会声会影2024快速掌握入门技巧

一听说视频剪辑我们就不由得联想到电影、电视等一些高端的视频剪辑技术&#xff0c;大家都觉得视频剪辑是一个非常复杂而且需要很昂贵的设备才可以完成的技术活&#xff0c;这对很多“门外汉”来说都可望而不可及。实际上&#xff0c;使用会声会影剪辑视频不仅是很多人都可以操…

《面向机器学习的数据标注规程》摘录

说明&#xff1a;本文使用的标准是2019年的团体标准&#xff0c;最新的国家标准已在2023年发布。 3 术语和定义 3.2 标签 label 标识数据的特征、类别和属性等。 3.4 数据标注员 data labeler 对待标注数据进行整理、纠错、标记和批注等操作的工作人员。 【批注】按照定义…

【话题】低代码123

目录 一、什么是低代码 二、低代码的优缺点 三、你认为低代码会替代传统编程吗&#xff1f; 四、有哪些低代码工具和框架 4.1 国外的平台 4.2 国内的平台 五、未来的软件研发 低代码&#xff0c;听着就过瘾的一个词。而且不是无代码&#xff0c;这说明&#xff0c;低代码…

GoogLeNet(pytorch)

亮点与创新&#xff1a; 1. 引入Inception基础结构 2. 引入PW维度变换卷积&#xff0c;启迪后续参数量的优化 3. 丢弃全连接层&#xff0c;使用平均池化层&#xff08;大大减少模型参数&#xff09; 4. 添加两个辅助分类器帮助训练&#xff08;避免梯度消失&#xff0c;用于…

方舟无限ARX-5臂的奇异验证

事情起因是&#xff0c;某技术人员号称这款机械臂无奇异点&#xff0c;博主当场一个【黑人问号脸】。 既然是串联臂&#xff0c;大概很难做到无奇异点~ 为了反驳&#xff0c;博主建模简单分析了下&#xff0c;偏置参数随便写了个&#xff0c;具体验证程序见文末。 clear,clc,…

共同编辑文档功能实现(websocket)

目录 前言 websocket封装 wangeditor下载 共同编辑文档代码实现 HTML样式部分 JS部分 css部分 前言 功能&#xff1a;实现文档共同编辑功能&#xff0c;可以实时接收到其他人的信息 思路&#xff1a;先调用接口获取相应的数据进行渲染&#xff0c;然后通过webSocket建…

C#基础知识 - 基本语法篇

C#基础知识-基本语法篇 第2节 C#基本语法2.1 C#程序结构2.2 C# 结构解析2.3 命名空间及标识符、关键字2.3.1 别名的使用2.3.2 标识符2.3.3 C#关键字 更多C#基础知识详解请查看&#xff1a;C#基础知识 - 从入门到放弃 第2节 C#基本语法 2.1 C#程序结构 “Hello, World”程序历…

棋牌的电脑计时计费管理系统教程,棋牌灯控管理软件操作教程

一、前言 有的棋牌室在计时的时候&#xff0c;需要使用灯控管理&#xff0c;在开始计时的时候打开灯&#xff0c;在结账后关闭灯&#xff0c;也有的不需要用灯控&#xff0c;只用来计时。 下面以 佳易王棋牌计时计费管理系统软件为例说明&#xff1a; 软件试用版下载或技术支…

Java架构师系统架构高可用维度分析

目录 1 导语2 可用性介绍3 本地高可用-集群、分布式4 本地高可用-数据逻辑保护5 异地容灾-双活、两地三中心6 异地容灾-DRP规划&BCP业务连续性7 多活和妥协方案8 高可用流程9 总结想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导语 Java架构师在进行系统架构设…

ELk(七)—部署Nginx

目录 部署Nginxfilebeat启动Nginx模块Module对nginx模块配置进行修改修改nginx-log.yml配置文件 部署Nginx 下面是nginx的安装脚本&#xff0c;里面的参数可以根据实际需要进行修改。 #!/bin/bash#新建一个文件夹用来存放下载的nginx源码包mkdir -p /opt/nginx cd /opt/nginx…

Android Studio 软件如何将系统自带的标题栏隐藏

目录 一、实现效果 二、开发环境 三、实现方法 ①首先创建一个新的项目 ②打开你需要隐藏标题栏的Activity ③我们看下正常的显示效果 ④然后在onCreate中进行代码编写 ⑤点击运行查询看效果 三、Android Studio 模板 一、实现效果 二、开发环境 三、实现方法 在Andro…

千帆竞渡,鸿蒙已过万重山

近期&#xff0c;华为宣布其自主研发的鸿蒙Next系统将不再兼容Android系统&#xff0c;而是完全独立运营。 也就是说&#xff0c;你的 Android APK 已经不能在 HarmonyOS NEXT 上运行&#xff0c;因为系统已经不存在 AOSP 代码&#xff0c;甚至没有 JVM。 此举意味着鸿蒙系统…

pytorch网络的增删改

本文介绍对加载的网络的层进行增删改, 以alexnet网络为例进行介绍。 1. 加载网络 import torchvision.models as models alexnet models.alexnet(weightsmodels.AlexNet_Weights.DEFAULT) print(alexnet)2. 删除网络 在做迁移学习的时候&#xff0c;我们通常是在分类网络的…