Core04:MAth、Date对象、定时器

38 阅读4分钟

Math对象

强调:Math不需要创建,直接使用 属性:Math有一些属性,涉及到科学计数法,但是几乎用不到,只有Math.PI有可能用到 === 3.1415926... 这一串数字其实我们不需要自己创建,浏览器自带 API

    1、取整:31、上取整:超过一点点,就取下一个整数
    	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

    创建:41、创建一个当前日期
    		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代表是14、复制一个日期:
    		为什么:日期的所有的API都是直接修改原日期的,无法获得修改之前的日期
    		所以,在执行API之前先进行复制,然后再操作复制后的日期
    		var end=new Date(start);

    使用:21、两个日期对象之间,可以相减,得到一个毫秒差(大-小),换算出自己想要的任何一部分 - 日期的本质其实就是保存了一个毫秒数 - 做倒计时的关键点
        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~60代表星期天,外国人的眼里星期天才是一个星期的第一天
                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);