Math & Date

对象的分类

内部对象:(在任何Es实现中都可以使用)

1:本地对象:ECMAScript提供的需要实例化(new)才能使用的对象 Object Array String Function Data 等

2:内置对象:ECMAScript提供的不需要实例化就能使用的对象,只有Global(全局对象)和Math

自定义对象:由开发人员自己创建的对象

宿主对象:目前主要是指浏览器提供的对象比如BOM DOM是js独有的

内置对象

内置对象就是js语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或者最基本而必要的功能(属性和方法)

Math
  • Math对象是js的原生对象,提供各种数学功能,不是一个构造函数调用时不需要使用new生成对象实例,所有的属性和方法都必须在Math上调用

    • Math的静态属性提供一些数学常数,这些属性是只读的不能修改 Math.PI //Math对象的属性,圆周率 3.1415926....

    • Math提供了一些静态方法

最大最小值 (参数不能为数组 传数组为NaN)
Math.max(num1,num2) //返回若干个参数之际的较大的数 
Math.min(num1,num2)  //返回较小的数


Matn.max(1,2,"哈哈")  //NaN
Math.max() //-Infinity
在js中不提供找出数组中最大元素的函数,结合apply方法和Math.max方法可以,就可以返回数组中最大元素
  var arr=[1,2,3,33,24,56,3,4,6767,3323,36,-1]
  console.log(Math.max.apply(null,arr))//null-->arr必须是一个数组
  console.log(Math.min.apply(null,arr))

绝对值(数字到坐标原点的距离)
Math.abs(-1) //-1
Math.abs("77") //77
Math.abs('nihao') //NaN

向下取整 floor 地板 是往最小了取整数值
Math.floor(3.4) //3
Math.floor(3.9) //3

向上取整 ceil 天花板 是往最大了取整数值
Math.ceil(4.6//5
Math.ceil(4.1//5
Math.ceil(-10.5//-10

四舍五入   不管符号,只看数值,进行四舍五入   特殊记忆: 负数 -?.5直接舍
Math.round(1.5) //2
Math.round(-1.5)//-1    ??**.5**特殊直接舍???
Math.round(10.499)//10 取整只看小数点后一位来四舍五入

返回0至1之间的随机数x(0=<x<1),这个方法不需要参数,,每次调用自动返回一个随机数
Math.random()  

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/random

得到一个两数之间的随机整数,包括两个数在内

随机点名的案例 (bz)

  Math.random()  返回 0~1之间的随机数 含小数 
    0~10之间的随机整数: 
            使用Math.random()获取0~0.9999之间的随机数 *10  0~9.9999

            取整:Math.floor() 向下取整 0~9
                 Math.ceill() 向上取整 1~10 出现0的概率很小
                 Math.round() 四舍五入取整  0~10   
                    0~0.49999 0
                    0.5~1.4999 1
                                        1.5~2.4999 2
                                        ....
                    8.5~9.4999 9
                    9.5~9.9999 10
                                四舍五入取整,得到 0  10 的概率是1到9的一半   不考虑概率舍可以直接用的

    0~20之间的随机整数:
            使用Math.random()获取0~1之间的随机数 *20 取整
            
            
    0~(m-n)之间的随机整数 
            使用Math.random()获取0~1之间的随机数 *(m-n+1 取整

    20~30
            使用Math.random()获取0~1之间的随机数 *10+20
            
    30~50
            使用Math.random()获取0~1之间的随机数* (50-30+30
            。。。。
     n~m
                    使用Math.random()获取0~1之间的随机数* (m-n)+n


                    
//-------比较选取哪种取整方式
  var obj={};
//console.log(Math.random()); 
  for(var i=0;i<=1000;i++){ 
    var res=Math.floor(Math.random()*(10+1)); //概率差不多
    // var res=Math.ceil(Math.random()*10); 
    // var res=Math.round(Math.random()*10); //使用向下取整获取的数字两端少,中间多  两边概率小
    if(obj[res]){
        obj[res]++
    }else{
        obj[res]=1;
    }

  }
  console.log(obj)
  
  //封装范围内随机整数
  
  /* 
 @param {NUMBER}   n 数字1
 @param {NUMBER}   m 数字1
 @return {NUMBER}  随机数字
*/

function rangeRandom(n,m){
    var max=Math.max(n,m);
    var min=Math.min(n,m);
    return   Math.floor(Math.random()*(max-min+1)+min);
}
var res=rangeRandom(20,80)
console.log(res)
数值.toFixed(指定小数位数的数字)
//将数值四舍五为指定小数位数的数字

数字转换进制

  • 进制是一种数字的表示方法,进制有2~36进制

    js里进制转换分为两种

    • 十进制转换为其他进制

      使用方法:数字.toString(你要转换的进制)

      返回值:以字符串的形式返回给你转换好的进制数字,如果不以字符串的形式返回,那么在js里自动转换成十进制

      var num=100;
       console.log(num.toString(2));  //1100100
       console.log(num.toString(16)); //64
    • 其他进制转换为十进制

      方法:parseInt(要转换的数字,你把这个数字当做进制)

      返回值:转换好以后的十进制数字

       console.log(parseInt(101,8));// 65 将一个8进制的数字101转换为十进制后是65

      注意计算的时候要是同一进制的数值再计算

Date

js有一个内置的构造函数Date,是js的时间库,用来处理时间和日期。

Date是一个构造函数,需要先用new调用生成对象

格式:var time=new Date() 返回值:当前终端的当前时间,当把你电脑的时间调整后,得到的是调整以后的时间

Date对象以国际标准时间1970年的1月1日00:00:00作为时间的零点,可以表示的时间是前后各一亿天(单位为毫秒)

可以创建一个指定日期的时间对象

var today=new Date();
  • 如果不加参数,返回的实例代表的是当前时间的字符串

  • 可以接受多种格式的参数,返回一个该参数对应的时间

    • 参数为时间零点开始计算的毫秒数

      new Date(1378218728000)
      // Tue Sep 03 2013 22:32:08 GMT+0800 (CST)
    • 参数为日期字符串

      日期字符串的格式: yyyy-mm-dd HH:MM:SS yyyy/mm/dd HH:MM:SS

      年月日和时分秒之间有一个空格

      当使用字符串这个形式的时候,1表示1月,12表示12月

      new Date("2021-6-4")
      new Date("2021/6/4")
      new Date("06/04/2021")
      
      //Fri Jun 04 2021 00:00:00 GMT+0800 (中国标准时间)
    • 参数为多个整数,代表年、月、日、时、分、秒、毫秒

      new Date(2021,6,4,8,7,9,9) 
      //Sun Jul 04 2021 08:07:09 GMT+0800 (中国标准时间)

      参数为年月日多个整数时,年和月不能省略,其他参数可以省略,也就是说至少要有两个参数,因为如果只有一个参数的话,Date会将其解释为毫秒

      参数的取值:

      • 年:使用四位数的年份 2000

      • 月:从0开始计算 即 0至11,0是1月,11是12月

      • 日:从1开始计算,即1至31

      • 时:0到23

      • 分:0到59

      • 秒:0到59

      • 毫秒:0到999

      注意:1秒等于1000毫秒

      除了日的默认值是1,时分秒毫秒的默认值都是0

      除了年以外的每一个数字都会自动进位

      这些参数如果超出了正常范围,会被自动折算,比如月份设置为15,就会被折算为下一年的4月

      new Date(2013, 15)
      // Tue Apr 01 2014 00:00:00 GMT+0800 (CST)
      new Date(2013, 0, 0)
      // Mon Dec 31 2012 00:00:00 GMT+0800 (CST)
      上面代码的第二个例子,日期设为0,就代表上个月的最后一天。
  • 日期的运算

    两个日期实例对象进行减法运算时,返回的是他们之间间隔的毫秒数 即两个时间对象时间戳的差值

    两个日期实例对象进行加法运算时,返回的是两个字符串拼接后的新的字符串

    因为:类型自动转换,Date实例如果转为数值,则等于对应的毫秒数,如果转为字符串,则等于对应的日期字符串

    var d1 = new Date(2000, 2, 1);
    var d2 = new Date(2000, 3, 1);
    
    d2 - d1
    // 2678400000获得时间戳
    d2 + d1
    // "Sat Apr 01 2000 00:00:00 GMT+0800 (CST)Wed Mar 01 2000 00:00:00 GMT+0800 (CST)"
  • 日期格式化(获取时间对象信息的方法)

    Date对象提供了一系列get*放法,用来获取实例对象内部信息

    格式:

    • 时间对象.getFullYear() :返回时间对象的(4位)年份 Number数据类型

    • 时间对象.getMonth():返回月份(0表示1月,11表示12月),返回的月份比实际的月份小1,要返回值加1 Number数据类型

    • 时间对象.getDate():返回当天的日期(从1开始) Number数据类型

    • 时间对象.getHours():返回小时(0至23) Number数据类型

    • 时间对象.getMinutes(); 返回分钟(0至59) Number数据类型

    • 时间对象.getSeconds();返回秒(0至59) Number数据类型

    • 时间对象.getMilliseconds(): 返回当前时间的毫秒(0至999) Number数据类型


    修改时间对象的某一指定信息 返回值是修改信息后时间戳

    • 时间对象.setFullYear(你要设置的年) 作用:设置时间对象的年份信息

    • 时间对象.setMonth(你要设置的月))

      月份(0表示1月,11表示12月)

    • 时间对象.setDate(你要设置的日))

    • 时间对象.setHours(你要设置的小时))

    • 时间对象.setMinutes(你要设置的分));

    • 时间对象.setSeconds(你要设置的秒));

    • 时间对象.setMilliseconds(你要设置的毫秒))

    • 时间对象.setTime(时间戳)) 作用:根据时间戳,定位到指定的时间

      var d1 = new Date(2000, 2, 1);  返回值是对象的时间戳
      new Date(d1.setFullYear(1989));
    • --还有一套按照UTC时间的设置方法


  • 获取世界标准时间的时间信息

    时间对象.getUTCFullYear()

    时间对象.getUTCMonth()

    时间对象.getUTCDate()

    时间对象.getUTCHourse()

    时间对象.getUTCMinutes()

    时间对象.getUTCSeconds()

    时间对象.getUTCMilliSeconds()亲


时间对象.getDay(): 返回星期几 星期日为0,星期一为1... Number数据类型

var Day=new Date();
Day.getDay();

格林威治时间 1970年1月1日00:00:00 时间长河的起点,时间零点

时间戳:当前时间距离时间零点1970年1月1日00:00:00的过了多少毫秒数

获取指定时间的时间戳,可以带参数也可以不带参数,不带参数则是当前时间的时间戳,带参数则是指定时间的时间戳

  • 时间对象.getTime([指定时间])

  • 时间对象.valueOf([指定时间]))方法

  • +new Date([指定时间]))

    var ms = +new Date();
    var d1 = new Date(2020,10,2,2,2,2);
    
    console.log(d1.getTime());  //1604253722000
    console.log(d1.valueOf());   //1604253722000
    console.log(+new Date(2020,10,2,2,2,2));  //1604253722000
  • H5新增的方法

    Date.now() 返回当前时间距离时间零点(1970年1月1日 00:00:00 UTC)的毫秒数,相当于 Unix 时间戳乘以1000 返回的是当前时间的时间戳,带参数指定时间的话,参数会被省略

    Date.now()  //静态方法,不用实例化

案例:

封装一个函数,返回当前的时分秒,格式为09:09:10

function getTime(){
	var time=new Date();
	var h=time.getHours();
	h=h<10?'0'+h:h;
  var m=time.getMinutes();
	m=m<10?'0'+m:m;
  var s=time.getSeconds();
	s=s<10?'0'+s:s;
	return h+':'+m+':'+s;
}
梓旭梓旭
THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录