JavaScript教程(六)--- 数字和日期

数字和日期

本章节介绍了在 JavaScript 中使用数字和日期来处理和执行计算的概念,对象和函数。

数字

在 JavaScript 里面,数字均为双精度浮点类型(double-precision 64-bit binary format IEEE 754),即一个介于 ±2^−1023 和 ±2^+1024 之间的数字,或约为 ±10^−308 到 ±10^+308,数字精度为 53 位。整数数值仅在 ±(2^53 - 1) 的范围内可以表示准确。

除了能够表示浮点数,数字类型也还能表示三种符号值:+Infinity(正无穷)、-Infinity(负无穷)和 NaN (not-a-number,非数字)。

JavaScript 最近添加了 BigInt 的支持,能够用于表示极大的数字。使用 BigInt 的时候有一些注意事项,例如,你不能让 BigInt 和 Number 直接进行运算,你也不能用 Math 对象去操作 BigInt 数字。

请参见 Javascript 指南中的 JavaScript 数据类型和数据结构,了解其他更多的基本类型。

你可以使用四种数字进制:十进制、二进制、八进制和十六进制。

十进制数字

1234567890
42

请注意,十进制可以以 0 开头,后面接其他十进制数字,但是假如下一个接的十进制数字小于 8,那么该数字将会被当做八进制处理。

0888 // 888 以十进制解析
0777 // 以八进制解析,为十进制的 511

二进制数字

二进制数字语法是以零为开头,后面接一个小写或大写的拉丁文字母 B(0b 或者是 0B)。假如 0b 后面的数字不是 0 或者 1,那么就会提示这样的语法错误(SyntaxError):“Missing binary digits after 0b(0b 之后缺失二有效的二进制数据)”。

0b10000000000000000000000000000000 // 2147483648
0b01111111100000000000000000000000 // 2139095040
0B00000000011111111111111111111111 // 8388607

八进制数字

八进制数字语法是以 0 为开头的。假如 0 后面的数字不在 0 到 7 的范围内,该数字将会被转换成十进制数字。

0O755 // 493
0o644 // 420

在 ECMAScript 5 严格模式下禁止使用八进制语法。八进制语法并不是 ECMAScript 5 规范的一部分,但是通过在八进制数字添加一个前缀 0 就可以被所有的浏览器支持:0644 === 420 而且 "\045" === "%"。在 ECMAScript 6 中使用八进制数字是需要给一个数字添加前缀“0o”。

const n = 0755; // 493
const m = 0644; // 420

十六进制

十六进制数字语法是以零为开头,后面接一个小写或大写的拉丁文字母 X(0x 或者是 0X)。假如0x后面的数字超出规定范围 (0123456789ABCDEF),那么就会提示这样的语法错误(SyntaxError):“Identifier starts immediately after numeric literal”。

0xFFFFFFFFFFFFFFFFF // 295147905179352830000
0x123456789ABCDEF   // 81985529216486900
0XA                 // 10

指数形式

0e-5   // 0
0e+5   // 0
5e1    // 50
175e-2 // 1.75
1e3    // 1000
1e-3   // 0.001
1E3    // 1000

数字对象

内置的 Number 对象有一些有关数字的常量属性,如最大值、不是一个数字和无穷大的。你不能改变这些属性,但可以按下边的方式使用它们:

const biggestNum = Number.MAX_VALUE;
const smallestNum = Number.MIN_VALUE;
const infiniteNum = Number.POSITIVE_INFINITY;
const negInfiniteNum = Number.NEGATIVE_INFINITY;
const notANum = Number.NaN;

你永远只用从 Number 对象引用上边显示的属性,而不是你自己创建的 Number 对象的属性。

下面的表格汇总了数字对象的属性:

属性描述
Number.MAX_VALUE可表示的最大值
Number.MIN_VALUE可表示的最小值
Number.NaN特指”非数字“
Number.NEGATIVE_INFINITY特指“负无穷”;在溢出时返回
Number.POSITIVE_INFINITY特指“正无穷”;在溢出时返回
Number.EPSILON表示 1 和比最接近 1 且大于 1 的最小Number之间的差别
Number.MIN_SAFE_INTEGERJavaScript 最小安全整数。
Number.MAX_SAFE_INTEGERJavaScript 最大安全整数。
方法描述
Number.parseFloat()把字符串参数解析成浮点数,和全局方法 parseFloat() 作用一致。
Number.parseInt()把字符串解析成特定基数对应的整型数字,和全局方法 parseInt() 作用一致。
Number.isFinite()判断传递的值是否为有限数字。
Number.isInteger()判断传递的值是否为整数。
Number.isNaN()判断传递的值是否为 NaN. More robust version of the original global isNaN().
Number.isSafeInteger()判断传递的值是否为安全整数。

数字的类型提供了不同格式的方法以从数字对象中检索信息。以下表格总结了 数字类型原型上的方法。

方法描述
toExponential()返回一个数字的指数形式的字符串,形如:1.23e+2
toFixed()返回指定小数位数的表示形式,var a=123,b=a.toFixed(2)//b="123.00"
toPrecision()返回一个指定精度的数字。如下例子中,a=123 中,3 会由于精度限制消失 var a=123,b=a.toPrecision(2)//b="1.2e+2"

数学对象(Math)

对于内置的Math数学常项和函数也有一些属性和方法。比方说, Math 对象的 PI 属性会有属性值 pi (3.141...),你可以像这样调用它:

Math.PI; // π

同理,标准数学函数也是 Math 的方法。这些包括三角函数、对数、指数,和其他函数。比方说你想使用三角函数 sin,你可以这么写:

Math.sin(1.56);

需要注意的是 Math 的所有三角函数参数都是弧度制。

下面的表格总结了 Math 对象的方法。

Math 的方法

方法描述
abs()绝对值
sin(), cos(), tan()标准三角函数;参数为弧度
asin(), acos(), atan(), atan2()反三角函数; 返回值为弧度
sinh(), cosh(), tanh()双曲三角函数; 参数为弧度。
asinh(), acosh(), atanh()反双曲三角函数;返回值为弧度。
pow(), exp(), expm1(), log10(), log1p(), log2()指数与对数函数
floor(), ceil()返回小于等于参数的最大整数;返回大于等于参数的最小整数
min(), max()返回一个以逗号间隔的数字参数列表中的较小或较大值 (分别地)
random()返回 0 和 1 之间的随机数。
round(), fround(), trunc(),四舍五入和截断函数
sqrt(), cbrt(), hypot()平方根,立方根,所有参数平方和的平方根两个参数平方和的平方根
sign()数字的符号,说明数字是否为正、负、零。
clz32(), imul()在 32 位 2 进制表示中,开头的 0 的数量。返回传入的两个参数相乘结果的类 C 的 32 位表现形式

和其他对象不同,你不能够创建一个自己的 Math 对象。你只能使用内置的 Math 对象。

日期对象

JavaScript 没有日期数据类型。但是你可以在你的程序里使用 Date 对象和其方法来处理日期和时间。Date 对象有大量的设置、获取和操作日期的方法。它并不含有任何属性。

JavaScript 处理日期数据类似于 Java。这两种语言有许多一样的处理日期的方法,也都是以 1970 年 1 月 1 日 00:00:00 以来的毫秒数来储存数据类型的。

Date 对象的范围是相对距离 UTC 1970 年 1 月 1 日 的前后 100,000,000 天。

创建一个日期对象:

var dateObjectName = new Date([parameters]);

这里的 dateObjectName 对象是所创建的 Date 对象的一个名字,它可以成为一个新的对象或者已存在的其他对象的一个属性。

不使用 new 关键字来调用 Date 对象将返回当前时间和日期的字符串

前边的语法中的参数(parameters)可以是一下任何一种:

  • 无参数 : 创建今天的日期和时间,例如: today = new Date();.
  • 一个符合以下格式的表示日期的字符串:"月 日,年 时:分:秒"。例如: var Xmas95 = new Date("December 25, 1995 13:30:00")。如果你省略时、分、秒,那么他们的值将被设置为 0。
  • 一个年,月,日的整型值的集合,例如: var Xmas95 = new Date(1995, 11, 25)
  • 一个年,月,日,时,分,秒的集合,例如: var Xmas95 = new Date(1995, 11, 25, 9, 30, 0);.

Date 对象的方法

处理日期时间的 Date 对象方法可分为以下几类:

  • "set" 方法,用于设置 Date 对象的日期和时间的值。
  • "get" 方法,用于获取 Date 对象的日期和时间的值。
  • "to" 方法,用于返回 Date 对象的字符串格式的值。
  • parse 和 UTC 方法,用于解析 Date 字符串。

通过“get”和“set”方法,你可以分别设置和获取秒,分,时,日,星期,月份,年。这里有个 getDay 方法可以返回星期,但是没有相应的 setDay 方法用来设置星期,因为星期是自动设置的。这些方法用整数来代表以下这些值:

  • 秒,分:0 至 59
  • 时:0 至 23
  • 星期:0 (周日) 至 6 (周六)
  • 日期:1 至 31
  • 月份:0 (一月) to 11 (十二月)
  • 年份:从 1900 开始的年数

例如,假设你定义了如下日期:

var Xmas95 = new Date("December 25, 1995");

Then Xmas95.getMonth() 返回 11, and Xmas95.getFullYear() 返回 1995.

getTime 和 setTime 方法对于比较日期是非常有用的。getTime方法返回从 1970 年 1 月 1 日 00:00:00 的毫秒数。

例如,以下代码展示了今年剩下的天数:

var today = new Date();
var endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // 设置日和月,注意,月份是 0-11
endYear.setFullYear(today.getFullYear()); // 把年设置为今年
var msPerDay = 24 * 60 * 60 * 1000; // 每天的毫秒数
var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;
var daysLeft = Math.round(daysLeft); //返回今年剩下的天数

这个例子中,创建了一个包含今天的日期的Date对象,并命名为today,然后创建了一个名为endYearDate对象,并把年份设置为当前年份,接着使用todayendYeargetTime分别获取今天和年底的毫秒数,再根据每一天的毫秒数,计算出了今天到年底的天数,最后四舍五入得到今年剩下的天数。

parse 方法对于从日期字符串赋值给现有的 Date 对象很有用,例如:以下代码使用parsesetTime分配了一个日期值给IPOdate对象:

var IPOdate = new Date();
IPOdate.setTime(Date.parse("Aug 9, 1995"));

示例

在下边的例子中,JSClock() 函数返回了用数字时钟格式的时间:

function JSClock() {var time = new Date();var hour = time.getHours();var minute = time.getMinutes();var second = time.getSeconds();var temp = "" + (hour > 12 ? hour - 12 : hour);if (hour == 0) temp = "12";temp += (minute < 10 ? ":0" : ":") + minute;temp += (second < 10 ? ":0" : ":") + second;temp += hour >= 12 ? " P.M." : " A.M.";return temp;
}

JSClock函数首先创建了一个叫做time的新的Date对象,因为没有参数,所以time代表了当前日期和时间。然后调用了getHoursgetMinutes以及getSeconds方法把当前的时分秒分别赋值给了hourminutesecond

接下来的 4 句在time的基础上创建了一个字符串,第一句创建了一个变量temp,并通过一个条件表达式进行了赋值,如果小时大于 12,就为 (hour - 12),其他情况就为hour,除非hour为 0,这种情况下,它会变成 12。

接下来的语句拼接了minute的值到temp后。如果minute小于 10,条件表达式就会在minute前边加个 0,其他情况下加一个冒号。然后按同样的方式在temp后拼接上了秒。

最后,如果hour是 12 或者更大,条件表达式会在temp后拼接"P.M.",否则拼接"A.M."。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LangChain调用tool集的原理剖析(包懂)

一、需求背景 在聊天场景中&#xff0c;针对用户的问题我们希望把问题逐一分解&#xff0c;每一步用一个工具得到分步答案&#xff0c;然后根据这个中间答案继续思考&#xff0c;再使用下一个工具得到另一个分步答案&#xff0c;直到最终得到想要的结果。 这个场景非常匹配la…

Centos7 k8s 集群 - Rook Ceph 安装

环境准备 基础环境 系统名称操作系统CPU内存硬盘Kubernete 版本Docker版本IPmasterCentos74c4gsdb 20G1.17.023.0.1192.168.1.128node01Centos74c4gsdb 20G1.17.023.0.1192.168.1.129node02Centos74c4gsdb 20G1.17.023.0.1192.168.1.130node03Centos74c4gsdb 20G1.17.023.0.1…

可变参模板

目录 概述 可变参函数模板 可变参类模板 概述 可变参模板是C11引入的一个功能强大的特性。英文名是Variadic Templates。其允许我们定义参数数量可变的模板函数和模板类&#xff0c;更加的提高了编写的灵活性和通用性。在可变参数模板中&#xff0c;参数的数量在编译时才会确…

ssm+vue的实验室课程管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的实验室课程管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

RabbitMQ消息模型之Simple消息模型

simple消息模型 生产者 package com.example.demo02.mq.simple;import com.example.demo02.mq.util.ConnectionUtils; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection;import java.io.IOException;/*** author Allen* 4/10/2024 8:07 PM* versi…

绝地求生:AUG爆裂弹球黑货箱:街机动漫风格大家会喜欢吗?

大好&#xff0c;我闲游盒&#xff01; 4.10更新后&#xff0c;AUG的新成长型也出来了&#xff0c;更新后我觉得AUG变好用了一点&#xff0c;不知道大家有没有感觉出来&#xff1f; 宝箱概率 本期主角 AUG-爆裂弹球&#xff08;紫色配粉红色&#xff09; 本次的AUG我才升到5级…

从 SQLite 3.4.2 迁移到 3.5.0(二十)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite---调试提示&#xff08;十九&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 ​ SQLite 版本 3.5.0 &#xff08;2007-09-04&#xff09; 引入了一个新的操作系统接口层&#xff0c; 与所有先前版本的 SQLi…

通过WebShell登录SQL Server主机并使用SSRS报表服务

背景信息 RDS SQL Server提供了WebShell功能&#xff0c;允许用户通过Web界面登录到RDS SQL Server实例的操作系统中&#xff0c;并在该操作系统中执行命令、上传下载文件等操作。WebShell功能方便用户对RDS SQL Server实例的管理和维护&#xff0c;特别是在无法使用SSH客户端的…

angular版本升级成16后css的踩坑

angualr版本升级16后&#xff0c;angualr项目打包后会把 left: 0; top: 0; right: 0; bottom: 0; 转换为inset&#xff1a;0&#xff0c; safir14.5以下的浏览器识别不了inset&#xff1a;0这个样式导致css样式失效。页面出现问题。 后面我特地学习了inset属性。 inset 是一…

社交网络的未来图景:探索Facebook的发展趋势

随着科技的不断进步和社会的快速变迁&#xff0c;社交网络作为连接人与人之间的重要纽带&#xff0c;扮演着日益重要的角色。而在众多社交网络中&#xff0c;Facebook作为老牌巨头&#xff0c;一直在探索着新的发展路径&#xff0c;引领着社交网络的未来图景。本文将深入探索Fa…

SQLite---调试提示(十九)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite Android 绑定&#xff08;十八&#xff09; 下一篇&#xff1a;从 SQLite 3.4.2 迁移到 3.5.0&#xff08;二十&#xff09; ​ 以下是 SQLite 开发人员跟踪、检查和了解 核心 SQLite 库。 这些技术旨在帮助理解 核…

open c UF_MODL_create_simple_hole 识别放置平面 UF_MODL_ask_face_data

在BLOCK上创建一个简单孔 UF_FEATURE_SIGN sign UF_NULLSIGN;double block_orig[3] { -25.0,-25.0,0.0 };char* block_len[3] { "50","50","30" };tag_t blk_obj;UF_MODL_create_block1(sign, block_orig, block_len, &blk_obj);tag_t bo…

ubuntu如何截图? ubuntu中截屏的三种方法

文章目录 1.ubuntu主要用途2.ubuntu如何截图&#xff1f;2.1 方法一&#xff1a;键盘按键快捷键截屏 2.2 方法二&#xff1a;系统自带软件2.3 方法三&#xff1a;第三方软件 Reference 1.ubuntu主要用途 1、桌面操作系统&#xff1a;Ubuntu可用作个人电脑或笔记本电脑的操作系…

certbot—30秒部署HTTPS,永久免费,自动续约;ssl证书

Certbot 是一个由 Let’s Encrypt 开发的免费开源工具&#xff0c;用于自动化部署和管理 SSL/TLS 证书。它具有以下几个显著的好处&#xff1a; 免费证书&#xff1a;Certbot 使用 Let’s Encrypt 作为其证书颁发机构&#xff0c;Let’s Encrypt 提供免费的 SSL/TLS 证书。这意…

Doris 内网安装部署,基于 CentOS 7

实测 CentOS 7.6 和 7.9都可用&#xff0c;CentOS安装包为&#xff1a;标准安装盘DVD版&#xff0c;如果系统安装的是精简版&#xff0c;需要挂载DVD版或者自行下载依赖。 参考文档 快速开始 - Apache Doris Doris 下载地址&#xff1a;2.1.1 ( Latest ) -> x64 ( avx2 )…

Axios与Fetch——请求相关知识回顾

一、Axios 1、常规使用 &#xff08;1&#xff09;.then 方式 axios.get("./js/covid-data.json ").then(res > {this.list res.dataconsole.log(this.list);}); &#xff08;2&#xff09;async 方式 async mounted() {await axios.get("./js/covid-d…

计算两个时间段的差值

计算两个时间段的差值 运行效果&#xff1a; 代码实现&#xff1a; #include<stdio.h>typedef struct {int h; // 时int m; // 分int s; // 秒 }Time;void fun(Time T[2], Time& diff) {int sum_s[2] { 0 }; for (int i 0; i < 1; i) { // 统一为秒数sum_s[…

上海计算机学会 2023年9月月赛 乙组T2 方格路径(二)(最短路)

第二题&#xff1a;T2方格路径&#xff08;二&#xff09; 标签&#xff1a;最短路题意&#xff1a;给定 n m n m nm的方格地图&#xff0c;每个点要么是空地 . . .&#xff0c;要么是障碍物 ∗ * ∗&#xff0c;求左上角到右下角&#xff0c;最少的移除障碍个数&#xff0c…

ZCC8703 60V升压型、降压型、升降压型LED恒流驱动器 替代SY8703

描述&#xff1a; ZCC8703是一种集成功率开关的多工作模式、宽输入/输出DC-DC LED驱动芯片&#xff0c;具有3V到60V的宽输入电压范围&#xff0c;集成了软启动&#xff0c;从而最大限度地减少对外部浪涌抑制组件的需求&#xff0c;使其成为宽输入电源范围LED驱动的理想选择。输…

string的使用

string的使用 string的声明与初始化 读入字符串可用getline(cin, s) cin >> s int main(){//声明并初始化一个空字符串string str1;//使用字符串字面量初始化字符串string str2 "Hello Word!";//使用另一个string对象来初始化字符串string str3 str2;//使…