Math对象
专门提供数学计算的API
不需要创建,直接使用
属性:
Math有一些属性设计科学计算几乎用不到,只有Math.PI有时用到===3.1415926...,这一串数字不需要我们创建,直接使用
API:
取整:3种
向上取整:超过一点就去取下一个整数
var num=Math。ceil();
小数位数不能超过15位,否则此方法不能向上取整,只能取整
向下取整:无论超过多少都会省略小数部分
var num=Math.floor();
四舍五入取整:
var num=Math.round();
只看小数点后面的第一位
![](https://img-blog.csdnimg.cn/img_convert/374c72f2511d8ab926ade66ec604579b.png)
以上三种方法+parseInt(str去掉单位)+num.toFixed(d);
num.toFixed(d);
优点:
可以四舍五入,并保留指定小数位数,d就是保留小数的位数
解决游览器带来的误差
如:2-1.6=0.399999....
这种情况可以使用toFixed解决
缺点:结果是一个字符串,建议搭配parseFloat()使用
问题:不允许使用toFixed的情况下,自己封装一个函数,由用户传入数字和保留位数,实现四舍五入:
![](https://img-blog.csdnimg.cn/img_convert/b83ea80d01f81e0e01e699c5d50a8a37.png)
乘方和开方:
乘方:Math.pow(底数,幂); ——>简化:底数**幂
开方:Math.sqrt()——>只能开方
![](https://img-blog.csdnimg.cn/img_convert/e04f2e0ddf8f074513ba6e0e1181e470.png)
最大值和最小值:
var max/min=Math.max/min(a,b,c,d,e,f,g,...);
自动在你传入的数字中比较出最大值或最小值
问题:本身不支持数组参数
解决:
固定用法:
Math.max/min.apply(Math,arr);
apply具有打散数组的功能
![](https://img-blog.csdnimg.cn/img_convert/015748da74c00873fe4797bd622add00.png)
绝对值
Math.abs(-1);//1
随机数:
Math.random();在0-1之间随机的小数搭配parselnt,只能取到0,不能取到1,意味着不是最大值
公式:parselnt(Math.random()*(max-min+1)+min);
网页中某一块有随机功能,他底层一定用到了随机数
Date对象
概念:日期对象,提供日期和时间的API
创建:4种
创建一个当前日期
var now=new Date();
创建一个自定义时间
var birth=new Date("年/月/日 时:分:秒");
创建一个自定义时间
var brith=new Date(年,月,日,时,分,秒);
需要修改月份,从0-11,0代表1月
复制一个日期
日期的所有API都是直接修改原日期,无法获得修改之前的日期,所以在执行API之前先进行复制,在操作复制的日期
var end=new Date(atr);
使用
两个日期对象之间,可以相减(大-小)得到一个毫秒差,在换算出自己想要的部分
日期本质是保留了一个毫秒差——做倒计时的关键
创建日期的最后一种方式,没人用
var date=new Date(毫秒数);
计算机元年:1970年1月1日8点整
API:
分量:时间单位
年 月 日 星期:FullYear Month Date Day
时 分 秒 毫秒:Hours Minutes Seconds Milliseconds
每一个分量都有一对getXXX/setXXX的方法
其中getXXX负责获取一个分量的值
其中setXXX负责设置一个分量的值
特殊:
取值范围
FullYear 当前年份的数字
Month 0-11
Date 1-31
Day 0-6,0代表星期天
Hours 0-23
Minustes、Seconds 0-59
Day,没有set的方法
对某个份量进行加减
date.setXXX(date.getXXX()+n/-n;
格式化日期为本地字符串
date.toLocaleString();
具有兼容性问题。我们都是创建一个格式化方法来格式日期
如此会失去:日期的自动进制、日期的API
如此会得到:字符串的API
定时器
周期性定时器
每过一段时间就执行一次,先等后坐
开启:time=setInterval(callback,毫秒数);
停止:clearInterval(time);
一次性定时器
等一段时间,只作一次就结束
开启:time=setTimeout(callback,毫秒数);
停止:clearTimeout(time);
同步技术:代码必须一行一行的执行,前面没做完,后面就等着
异步技术:无论代码耗时多久,不会卡住后面的代码