Math对象
强调:Math不需要创建,直接使用 属性:Math有一些属性,涉及到科学计数法,但是几乎用不到,只有Math.PI有可能用到 === 3.1415926... 这一串数字其实我们不需要自己创建,浏览器自带 API
1、取整:3种
1、上取整:超过一点点,就取下一个整数
var num=Math.ceil(num);//小数点位数不能超过15位,否则此方法会失效,只能取整
2、下取整:无论超过多少,都会省略掉小数部分
var num=Math.floor(num);
3、四舍五入取整:
var num=Math.round(num);//只看第一位小数
以上三个方法都是在取整,而且只能取整
其余取整:parseInt(str)去掉单位+num.toFixed(d);
num.toFixed(d)的
优点:
1、传入自定义保留小数位数,并且带有四舍五入的操作
2、解决浏览器带来的舍入误差
缺点:结果是一个字符串,建议搭配上parseFloat使用
笔试题:不允许使用toFixed的情况下,自己封装一个函数,由用户传入数字以及保留的小数位数,进行四舍五入,返回一个数字
function toFixed(num,d){
num*=(10**d);
num=Math.round(num);
num/=(10**d);
return num;
}
var result=toFixed(Math.PI,4);
console.log(result)
2、乘方和开方
乘方:Math.pow(底数,幂); -> 更简化的方法:底数**幂
开方:Math.sqrt(num); -> 仅仅只能开平方
3、最大值和最小值:
var max/min=Math.max/min(a,b,c,d,e,f,g,....);//自动在你传入的数字中找到最大值或最小值
问题:不支持数组参数
解决:固定用法:Math.max/min.apply(Math,arr);//apply具有打散数组的功能
4、绝对值:
Math.abs(-1);//1
5、随机数:Math.random():在0~1之间取一个随机的小数
搭配上parseInt,只能取到0,不能取到1,意味着取不到最大值
公式:parseInt(Math.random()*(max-min+1)+min)
DATE对象:日期对象API
创建:4种
1、创建一个当前日期
var now=new Date();
2、创建一个自定义时间
var birth=new Date("yyyy/MM/dd hh:mm:ss");
3、创建一个自定义时间
var birth=new Date(yyyy,MM,dd,hh,mm,ss);//修改月份,从0~11月,0代表是1月
4、复制一个日期:
为什么:日期的所有的API都是直接修改原日期的,无法获得修改之前的日期
所以,在执行API之前先进行复制,然后再操作复制后的日期
var end=new Date(start);
使用:2类
1、两个日期对象之间,可以相减,得到一个毫秒差(大-小),换算出自己想要的任何一部分 - 日期的本质其实就是保存了一个毫秒数 - 做倒计时的关键点
2、API:
分量:时间的单位
年月日星期:FullYear Month Date Day
时分秒毫秒:Hours Minutes Seconds Milliseconds
每一个分量都有一对儿getXXXX/setXXXX
其中getXXX负责获取一个分量的值
其中setXXX复制设置一个分量的值
特殊:
1、取值范围:
FullYear - 当前年份的数字
Month - 0~11
Date - 1~31
Hours - 0~23
Minutes、Seconds:0~59
Day - 0~6;0代表星期天,外国人的眼里星期天才是一个星期的第一天
2、任何人都有set操作,唯独Day没有set
3、如果希望对某个分量进行加减操作的话
date.setXXXX(date.getXXXX()+/-n)
4、格式化日期为本地字符串:
date.toLocaleString()--具有兼容性问题,我们一般会选择自己封装一个format函数来进行格式化
用了此方法会失去一些东西:日期的自动进制、日期的所有的API
但是也会得到一些东西:字符串的API,你可以解锁更多的操作(替换、切割、截取...)
定时器
1、周期性定时器:每过一段时间会执行一次,先等后做,会反复执行,需要自己写停止才能停止
开启:timer=setInterval(callback,间隔毫秒数);
停止:clearInterval(timer);
2、一次性定时器:等待一段时间,只会做一次就结束了
开启:timer=setTimeout(callback,间隔毫秒数);
停止:clearTimeout(timer);
两个定时器,看起不同的操作,居然可以相互的转换,两者的底层是一样的!
同步技术:代码必须一行一行的执行,前面的没做完,后面的就只能等着,目前为止几乎所有的代码,都属于同步技术
异步技术:无论我们这一块代码如何,也不会卡住后续代码,目前这个技术只有定时器,最牛逼的异步技术(AJAX)
如何使用JS创建页面DOM元素:
1、创建空标签
var elem=document.createElement("标签名");
2、为这个空标签,设置必要的属性或事件
elem.属性名="属性值";
elem.on事件名=function(){操作}
3、将我们的元素放上到DOM树
父元素.appendChild(elem);