Skip to content

数学对象和日期对象

了解由于二进制带来的误差

javascript
0.1 + 0.2 //0.30000000000000004

Math对象

Math是一个 JavaScript 内置对象,是 window 对象下的一个属性

javascript
Math === window.Math

数学中我们常用的计算以及参数都会保存在 Math 对象中。

圆周率 π 和自然对数底数 e

javascript
Math.PI //3.1415926...
Math.E //2.71828182...

数学函数

  • 算术平方根Math.sqrt

计算开方结果

javascript
Math.sqrt(2) * Math.sqrt(2) //2.0000000000000004约等于2
  • pow指数
javascript
Math.pow(2, 3) //2的3次方
  • floorceilroundtrunc(向下取整,向上取整,四舍五入,删除小数部分)
  • 三角函数,反三角函数(弧度制)

正弦:Math.sin

javascript
Math.sin(Math.PI / 6) //0.49999999999999994约等于0.5

余弦:Math.cos

javascript
Math.cos(Math.PI / 3) //0.5000000000000001约等于0.5

正切:Math.tan

javascript
Math.tan(Math.PI / 4) //0.9999999999999999约等于0.5
  • 反三角 asin/acos/stan,根据正弦值余弦值正切值返回对应的弧度

随机数

  • 返回随机数Math.random,返回大于 0 小于 1 的随机数
javascript
let rdm = Math.random() //
rdm = Math.random()
rdm = Math.random()

随机数生成大于 n 小于 m 的随机数

javascript
let myRandom = (n = 0, m = 1) => Math.random() * (m - n) + n

界定

求不超过 n 的最大整数,取整

javascript
Math.floor(3.15) //3
Math.floor(-2.3) //-3
  • 绝对值Math.abs
  • 求一组数的最大值Math.max与最小值Math.min
javascript
let arr = [1, 3, 4, 99, 0]
Math.max(...arr) //0
Math.min(...arr) //99

利用 max 和 min 进行约束:

javascript
//约束a最大为1最小为0
a = Math.max(0, Math.min(a, 1))

parseIntparseFloat

全局方法,解析传入的字符串,

返回一个符合要求的 10 进制数,解析不出来返回NaN

parseInt 返回整数

传入两个参数:

第一个是需要解析的字符串,必填

第二个是进制基数 2-36(0-9,a-z),默认是 10

javascript
parseInt("1123.asdasd") //1123
parseInt("a123") //NaN
parseInt("Infinity") //Infinity
parseInt("123", 16) //以16进制识别123,值为1*16*16+2*16^1+3
parseInt("zzz", 36) //以36进制识别zzz,值为35*36*16+35*36+35
parseInt(123, 2) //123转字符串"123",2进制识别1 转2进制 1*Math.pow(2,0)

parseFloat返回带小数点的浮点类型

返回整数或者小数,支持科学记数法,解析不出来返回NaN

javascript
parseFloat("123.231") //123.231
parseFloat({
    toString() {
        return 1
    },
}) //1 底层是对传入的参数使用toString方法,或者valueOf方法
parseFloat([1, 23, 5]) // 1
parseFloat("asd") //NaN
parseFloat("2e-3") //0.003
parseFloat("2.32E3") //2320
parseFloat("0x13") //0

指数运算符(**)

指数运算公式 ** :(es6 新出,支持赋值)

javascript
Math.pow(3, 4) //81
3 ** 4 //81
let a = 2
a **= 3 //8
//等同于 a=a**3;

Date对象

Date是一个日期对象模型。

浏览器交互中运行Date()返回一个日期的字符串表示:

周几 月份 日期 年 时:分:秒 时制+时区(补充)

new Date()创建新的时间对象

javascript
let time = new Date()

new Date()的参数: 不写返回当前日期与时间

只有一个数字参数的时候。此参数表示从 1970 年 01 月 01 日 00:00:00 到现在经过的毫秒数

可依照顺序传入年,月,日,时,分,秒。其中年写 2 位数,表示 19xx 年,通常 4 位数,月填写 0 表示一月 11 表示 12 月,大于 12 表示多加一年 1,日从 1 开始超出减少同样影响月份。时是 24 进制,分和秒都是 60 进制

javascript
time = new Date(2018, 10, 10, 22, 10, 66)
//返回Sat Nov 10 2018 22:11:06 GMT+0800 (中国标准时间)的对象
time = new Date("2018-10-10")
time = new Date("2018/10/10")
//支持多种连接符(低版本IE只能用‘/’)
time = new Date(1541859066000)

isNaN 来判断是否是合法的日期对象(它只判断了月份有没有超过 12,日期有没有超过 31)

javascript
isNaN(new Date("2019-12-32")) //true

不同的日期对象都可以进行比较,直接参与数字运算,或者两个日期对象相减

javascript
time.getTime() //1541859066000
time.valueOf() //1541859066000
0 + time //1541859066000
  • .getTime返回时间戳,两个 Date 对象直接相减也可以得出时间戳之差(IE 低版本不支持)。
  • .getDate 返回日期在当月的几号(1-31)
  • .getDay 返回日期在本周的周几(0-6) 0 是周天
  • .getHours/.getFullYear/.getMonth/.getMinutes/.getSeconds 其中浏览器内部时间是东八区时间(北京)。可以在 get 和时间关键词中间添加 UTC 表示格林尼治时间。
  • getUTCHours/getUTCFullYear/getUTCMonth/getUTCDay/getUTCDate/getUTCMinutes/getUTCSeconds

设置日期:将前面的 get 换成 set 传入参数就可以了,注意参数的范围与类型。

标准格式

  • to time_string

    .toUTCString() -> Thu, 24 Jun 2021 07:38:16 GMT
    .toISOString() -> 2021-06-24T07:38:16.193Z(不带时区信息)
    .toString() -> Thu Jun 24 2021 15:38:16 GMT+0800 (中国标准时间)

  • to timestamp

    Date.parse(time_string or [object Date]) -> 1624520296000