数学对象和日期对象
了解由于二进制带来的误差
0.1 + 0.2 //0.30000000000000004
Math
对象
Math
是一个 JavaScript 内置对象,是 window 对象下的一个属性
Math === window.Math
数学中我们常用的计算以及参数都会保存在 Math 对象中。
圆周率 π 和自然对数底数 e
Math.PI //3.1415926...
Math.E //2.71828182...
数学函数
- 算术平方根
Math.sqrt
计算开方结果
Math.sqrt(2) * Math.sqrt(2) //2.0000000000000004约等于2
pow
指数
Math.pow(2, 3) //2的3次方
floor
和ceil
和round
和trunc
(向下取整,向上取整,四舍五入,删除小数部分)- 三角函数,反三角函数(弧度制)
正弦:Math.sin
Math.sin(Math.PI / 6) //0.49999999999999994约等于0.5
余弦:Math.cos
Math.cos(Math.PI / 3) //0.5000000000000001约等于0.5
正切:Math.tan
Math.tan(Math.PI / 4) //0.9999999999999999约等于0.5
- 反三角
asin/acos/stan
,根据正弦值余弦值正切值返回对应的弧度
随机数
- 返回随机数
Math.random
,返回大于 0 小于 1 的随机数
let rdm = Math.random() //
rdm = Math.random()
rdm = Math.random()
随机数生成大于 n 小于 m 的随机数
let myRandom = (n = 0, m = 1) => Math.random() * (m - n) + n
界定
求不超过 n 的最大整数,取整
Math.floor(3.15) //3
Math.floor(-2.3) //-3
- 绝对值
Math.abs
- 求一组数的最大值
Math.max
与最小值Math.min
let arr = [1, 3, 4, 99, 0]
Math.max(...arr) //0
Math.min(...arr) //99
利用 max 和 min 进行约束:
//约束a最大为1最小为0
a = Math.max(0, Math.min(a, 1))
parseInt
和parseFloat
全局方法,解析传入的字符串,
返回一个符合要求的 10 进制数,解析不出来返回NaN
parseInt
返回整数
传入两个参数:
第一个是需要解析的字符串,必填
第二个是进制基数 2-36(0-9,a-z),默认是 10
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
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 新出,支持赋值)
Math.pow(3, 4) //81
3 ** 4 //81
let a = 2
a **= 3 //8
//等同于 a=a**3;
Date
对象
Date
是一个日期对象模型。
浏览器交互中运行Date()
返回一个日期的字符串表示:
周几 月份 日期 年 时:分:秒 时制+时区(补充)
new Date()
创建新的时间对象
let time = new Date()
new Date()
的参数: 不写返回当前日期与时间
只有一个数字参数的时候。此参数表示从 1970 年 01 月 01 日 00:00:00 到现在经过的毫秒数
可依照顺序传入年,月,日,时,分,秒。其中年写 2 位数,表示 19xx 年,通常 4 位数,月填写 0 表示一月 11 表示 12 月,大于 12 表示多加一年 1,日从 1 开始超出减少同样影响月份。时是 24 进制,分和秒都是 60 进制
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)
isNaN(new Date("2019-12-32")) //true
不同的日期对象都可以进行比较,直接参与数字运算,或者两个日期对象相减
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