第二周第四天笔记

154 阅读4分钟

一、Math对象:专门提供了数学计算的API

    强调:不需要创建,直接使用

    属性: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、可以四舍五入,并且保留指定小数位数,d其实就是保留的小数位数
          2、解决浏览器带来的舍入误差,2-1.6=0.3999999999999这种情况就可以使用toFixed来解决
    缺点:结果是一个字符串,建议搭配上parseFloat()使用

笔试题:不允许使用toFixed的情况下,自己封装一个函数,由用户传入数字和保留位数,实现四舍五入操作:

    function toFixed(num,d){
            num*=(10**d);
            num=Math.round(num);
            num/=(10**d);
            return num;
    }
    var result=toFixed(Math.PI,2);
    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。

1.创建: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.使用:2类

    1、两个日期对象之间,可以相减(大-小),得到一个毫秒差,换算出自己想要的任何一部分 - 日期的本质其实就是保存了一个毫秒数 - 做倒计时的关键
        创建日期的最后一种方式,绝对没人用:var date=new Date(毫秒数);//计算机元年:1970118点整

    2、API:
        分量:时间的单位
        年月日星期:FullYear Month Date Day
        时分秒毫秒:Hours Minutes Seconds Milliseconds
        每一个分量都有一对儿getXXX/setXXX的方法
                其中getXXX负责获取一个分量的值
                其中setXXX负责设置一个分量的值
        特殊:
            1、取值范围:
                FullYear - 当前年份的数字
                Month - 0~11
                Date - 1~31
                Day - 0~60代表是星期天,外国人的眼里星期天才是一周的第一天的
                Hours - 0~23
                Minutes、Seconds:0~59
                日期你知道了取值范围,如果你还故意设置超出范围,他很聪明,会自动进制
            2Day,没有set方法

            3、如果希望对某个分量进行加减操作:
                date.setXXX(date.getXXX()+/-n)

            4、格式化日期为本地字符串:
                date.toLocaleString(); - 垃圾:具有兼容性问题,我们一般会选择自己创建一个格式化方法来格式日期
                用了此方法会失去一些东西:日期的自动进制、日期的API
                但是你也会获得一些东西:字符串的API

三、定时器:

    1、周期性定时器:每过一段时间就会执行一次,先等后做
            开启:timer=setInterval(callback,间隔毫秒数);
            停止:clearInterval(timer);

    2、一次性定时器:等待一段时间,只会做一次就结束了
            开启:timer=setTimeout(callback,间隔毫秒数);
            停止:clearTimeout(timer);

            同步技术:代码必须一行一行的执行,前面没做完,后面就等着
    定时器是我们第一次见到的异步技术:无论我这一块代码多么的耗时,也不会卡住后续代码