11.JS的内置对象(Math对象和Date对象)

一.什么是内置对象?

  • JavaScript 中的对象分为3种:自定义对象 、内置对象、 浏览器对象
  • 前面两种对象是JS 基础 内容,属于 ECMAScript; 第三个浏览器对象属于我们JS 独有的, 我们JS API 讲解
  • 内置对象就是指 JS 语言自带的一些对象,这些对象供开发者使用,==并提供了一些常用的或是最基本而必要的功能(属性和方法)==
  • 内置对象最大的优点就是帮助我们快速开发
  • JavaScript 提供了多个内置对象:Math、 Date 、Array、String等

二.查文档

2.1 MDN

学习一个内置对象的使用,只要学会其常用成员的使用即可,我们可以通过查文档学习,可以通过MDN/W3C来查询。

Mozilla 开发者网络(MDN)提供了有关开放网络技术(Open Web)的信息,包括 HTML、CSS 和万维网及 HTML5 应用的 API。

MDN: https://developer.mozilla.org/zh-CN/

2.2 如何学习对象中的方法

1.查阅该方法的功能

2.查看里面参数的意义和类型

3.查看返回值的意义和类型

4.通过 demo 进行测试

三.Math对象

Math 对象不是构造函数,它具有数学常数和函数的属性和方法。跟数学相关的运算(求绝对值,取整、最大值等)可以使用 Math 中的成员。

Math.PI      // 圆周率
Math.floor()     // 向下取整
Math.ceil()            // 向上取整
Math.round()           // 四舍五入版 就近取整   注意 -3.5   结果是  -3 
Math.abs()       // 绝对值
Math.max()/Math.min()    // 求最大和最小值 

注意:上面的方法必须带括号

<script>
    /* 
     数学对象
       1.Math.PI:圆周率
       2.Math.abs():绝对值
       3.Math.max():最大值,参数是Number类型,否则是NaN
       4.Math.min():最小值,参数是Number类型,否则是NaN
       5.Math.round():四舍五入,取大
       6.Math.random():[0,1)之间的随机数
       7.Math.ceil();向上取整
       8.Math.floor():向下取整
     */
    console.log(Math.PI); //3.1415926
    console.log(Math.abs(-0.5)); //0.5
    console.log(Math.max(6, 10, -3)); //10
    console.log(Math.min(6, 10, -3)); //-3
    console.log(Math.round(-1.5)); //-1
    console.log(Math.random());
    console.log(Math.ceil(1.5)); //2
    console.log(Math.floor(1.5)); //1
  </script>

3.1 封装自己的数学对象

利用对象封装自己的数学对象 里面有 PI 最大值和最小值

//对象:
    var MyMath = {
      PI: 3.1415,
      max: function (maxArr) {
        var max = maxArr[0];
        for (let i = 0; i < maxArr.length; i++) {
          if (max <= maxArr[i]) {
            max = maxArr[i];
          }
        }
        return max
      },
      min: function (minArr) {
        var min = minArr[0];
        for (let i = 0; i < minArr.length; i++) {
          if (min >= minArr[i]) {
            min = minArr[i];
          }
        }
        return min
      }
    }
    console.log(MyMath.PI);//3.1415
    console.log(MyMath.max([5, -6, 10, 30, 40]));//40
    console.log(MyMath.min([5, -6, 10, 30, 40]));//-6
1.构造函数
    /*  function MyMath() {
       this.PI = 3.1415926;
       this.max = function (maxArr) {
         var max = maxArr[0];
         for (let i = 0; i < maxArr.length; i++) {
           if (max <= maxArr[i]) {
             max = maxArr[i];
           }
         }
         return max
       };
       this.min = function (minArr) {
         var min = minArr[0];
         for (let i = 0; i < minArr.length; i++) {
           if (min >= minArr[i]) {
             min = minArr[i];
           }
         }
         return min
       }
     }
     var m1 = new MyMath()
     console.log(m1.PI);
     console.log(m1.max([1, -20, 30]));
     console.log(m1.min([1, -20, 30])); 

3.2 随机数方法 random()

random() 方法可以随机返回一个小数,其取值范围是 [0,1),左闭右开 0 <= x < 1

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

function getRandom(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min; 
}

3.3 随机点名系统

GIF 2021-5-18 18-45-50.gif
<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>随机点名系统</title>
    <style>
      .item {
        margin: 0 auto;
        width: 300px;
        text-align: center;
      }

      .item span {
        height: 40px;
        display: block;
        line-height: 40px;
      }

      .item img {
        display: block;
        margin-bottom: 20px;
      }
    </style>
  </head>

  <body>
    <div class="item">
      <h1>课堂随机点名系统</h1>
      <span>姓名:<i></i></span>
      <span>年龄:<i></i></span>
      <img src="" alt="" width="300">
      <button class="btn">
        <a href="javascript:history.go(0)">随机点名</a>
        <!-- <a href="javascript:location.reload()">随机点名</a> -->
        <!-- <a href="javascript:location.assign(location)">随机点名</a> -->
      </button>
    </div>


  </body>
  <script>
    function getRandom(min, max) {
      return Math.floor(Math.random() * (max - min + 1)) + min;
    }

    function callTheRoll(Arr) {
      return Arr[getRandom(0, Arr.length - 1)];
    }
    var arr = [{
        name: '张涛',
        age: 18,
        imgurl: '../../img/0.jpg'
      },
      {
        name: '科比',
        age: 41,
        imgurl: '../../img/1.jpg'
      },
      {
        name: '詹姆斯',
        age: 35,
        imgurl: '../../img/2.jpg'
      }, {
        name: '乔丹',
        age: 45,
        imgurl: '../../img/3.jpg'
      }, {
        name: '哈登',
        age: 21,
        imgurl: '../../img/4.jpg'
      },
    ]
    var obj = callTheRoll(arr);
    console.log(obj);
    var uName = obj['name'];
    var uage = obj['age'];
    var uImgUrl = obj['imgurl'];
    var i1 = document.querySelectorAll(".item>span>i")[0];
    var i2 = document.querySelectorAll(".item>span>i")[1];
    var imgUrl = document.querySelector(".item>img");
    i1.innerHTML = uName;
    i2.innerHTML = uage;
    imgUrl.src = uImgUrl;
  </script>

</html>

3.4 猜数字小游戏

<script>
    /* 
    随机生成一个1~10 的整数  我们需要用到 Math.random() 方法。
    需要一直猜到正确为止,所以一直循环。l
    用while 循环合适更简单。
    核心算法:使用 if  else if 多分支语句来判断大于、小于、等于。 
    */
    function getRandom(min, max) {
      return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    var guessNum = getRandom(1, 10);
    console.log("生成的数字是" + guessNum + "<br>");
    while (true) {
      var insertNum = parseInt(prompt("请输入一个1~10 的整数"));
      document.write('你猜的数字是' + insertNum)
      if (!isNaN(insertNum)) {
        if (insertNum > guessNum) {
          alert("数字输入过大");
        } else if (insertNum < guessNum) {
          alert("数字输入过小");
        } else {
          alert("恭喜你!你猜对了!数字是" + insertNum);
          break;
        }
      } else {
        continue
      }
    }
  </script>

四.日期对象

4.1 Date概述

  • Date 对象和 Math 对象不一样,他是一个构造函数,所以我们需要实例化后才能使用
  • Date 实例用来处理日期和时间

4.2 Date()方法的使用

4.2.1 获取当前时间必须实例化

var now = new Date();
console.log(now);

4.2.2 Date()构造函数的参数

如果括号里面有时间,就返回参数里面的时间。例如日期格式字符串为‘2019-5-1’,可以写成new Date('2019-5-1') 或者 new Date('2019/5/1')

==new Date()有四种形式:==

*1.new Date()里面什么也不传,返回此时此刻时间*

*2.new Date(dateString)表示日期的字符串值;*

*3.new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);分别提供日期与时间的每一个成员*

 *3.1 ==这种情况下,月份是从0-11表示==*

*4.new Date(value);Unix时间戳,一个 Unix 时间戳(Unix Time Stamp),它是一个整数值,*

 *表示自1970年1月1日00:00:00 UTC(the Unix epoch)以来的毫秒数,忽略了闰秒*
<script>
    /* 
    new Date()有四种形式:
       1.new Date()里面什么也不传,返回此时此刻时间
       2.new Date(dateString)表示日期的字符串值;
       3.new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);分别提供日期与时间的每一个成员
          3.1 这种情况下,月份是从0-11表示
       4.new Date(value);Unix时间戳,一个 Unix 时间戳(Unix Time Stamp),它是一个整数值,
         表示自1970年1月1日00:00:00 UTC(the Unix epoch)以来的毫秒数,忽略了闰秒。   
    */
    //1.获取当前时间
    var date = new Date();
    console.log(date); //Tue May 18 2021 19:46:50 GMT+0800 (中国标准时间)

    //2.new Date()里面传日期的字符串
    var time1 = new Date('2020-1-1');
    console.log(time1); //Wed Jan 01 2020 00:00:00 GMT+0800 (中国标准时间)

    //3.new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);
    //分别提供日期与时间的每一个成员
    var time3 = new Date(2020, 1, 1);
    console.log(time3); //Sat Feb 01 2020 00:00:00 GMT+0800 (中国标准时间),1表示二月

    //4.Unix时间戳
    //当前时间转换为时间戳
    var unix = new Date().getTime();
    console.log(unix); //1621341187916
    //时间戳转换为当前时间
    console.log(new Date(unix)); //Tue May 18 2021 20:34:11 GMT+0800 (中国标准时间)
  </script>

4.3 日期格式化

我们想要 2019-8-8 8:8:8 格式的日期,要怎么办?

需要获取日期指定的部分,所以我们要手动的得到这种格式。

image-20210519102545050
<script>
    /* 
   请写出这个格式的日期:2019年8月8日 星期四 
   */
    var date = new Date('2019-8-8');
    console.log(date); //Thu Aug 08 2019 00:00:00 GMT+0800 (中国标准时间)
    var year = date.getFullYear();
    var month = date.getMonth() + 1; //月份是0-11表示
    var day = date.getDate();
    var hour = date.getHours();
    var minutes = date.getMinutes();
    var seconds = date.getSeconds();
    var xq = date.getDay(); //星期是0-6表示,0是星期天
    var arr = ['天', '一', '二', '三', '四', '五', '六']
    console.log("时间是" + year + "年" + month + "月" + day + '日' + hour + "点" + minutes + "分" + seconds + "秒" + "星期" + arr[xq]);
  </script>

4.4 获取时间戳的方法

Date 对象是基于1970年1月1日(世界标准时间)起的毫秒数

为什么计算机起始时间从1970年开始?

我们经常利用总的毫秒数来计算时间,因为它更精确

 /* 
    获得时间戳的方法
    */
    //1.valueOf()方法
    var now = new Date().valueOf();
    console.log(now);

    //2.getTime()方法
    var timer = new Date().getTime();
    console.log(timer);

    //3.常用的方法:+
    var timer02 = +new Date();
    console.log(timer02);

    //H5中新增的方法
    var timer03 = Date.now();
    console.log(timer03);

4.5 练习

4.5.1.显示当前的时分秒

  //var now = new Date();
    var getNow = function () {
      var now = new Date();
      var h = now.getHours();
      h = h < 10 ? "0" + h : h
      var m = now.getMinutes();
      m = m < 10 ? "0" + m : m;
      var s = now.getSeconds();
      s = s < 10 ? "0" + s : s;
      document.write("现在时间是" + h + ":" + m + ":" + s + "<br/>");
    }
    //getNow()
    setInterval(function () {
      getNow()
    }, 1000)

4.5.2.京东倒计时

image-20210519134808408
GIF 2021-5-19 15-51-46.gif
<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>倒计时</title>
  </head>
  <style>
    .countdown {
      width: 190px;
      height: 100%;
      color: #fff;
      background-color: #e83632;
      background-image: url('./jd.png');
      background-size: contain;
      background-position: 50%;
      background-repeat: no-repeat;
      padding: 1px 0;
      margin: 0px auto;
    }

    .countdown .countdown-title {
      width: 100%;
      text-align: center;
      font-size: 30px;
      font-weight: 700;
      margin-top: 31px;
    }


    .countdown .countdown-desc {
      margin-top: 90px;
      font-size: 14px;
      text-align: center;
    }

    .countdown .countdown-main {
      margin-left: auto;
      margin-right: auto;
      width: 130px;
      height: 30px;
      margin-top: 10px;
      display: block;
      margin-bottom: 30px;
    }

    .countdown .countdown-main .timmer__unit {
      position: relative;
      float: left;
      width: 30px;
      height: 30px;
      text-align: center;
      line-height: 30px;
      background-color: #2f3430;
      margin-right: 20px;
      color: white;
      font-size: 20px;
    }

    /* .timmer__unit--hour::after {
      content: ":";
      width: 30px;
       display: block; 
    }*/

    .timmer__unit--second {
      margin-right: 0px !important;
    }
  </style>

  <body>
    <div class="countdown">
      <div class="countdown-title">京东秒杀</div>
      <div class="countdown-desc"><strong></strong>点场 距结束</div>
      <span class="timmer countdown-main">
        <span class="timmer__unit timmer__unit--hour"></span>
        <span class="timmer__unit timmer__unit--minute"></span>
        <span class="timmer__unit timmer__unit--second"></span>
      </span>
    </div>
  </body>
  <script>
    /* 
    倒计时:
        1.核心算法:输入的时间减去现在的时间就是剩余的时间,即倒计时 ,但是不能拿着时分秒相减,比如 05 分减去25分,结果会是负数的。
        2.用时间戳来做。用户输入时间总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余时间的毫秒数。
        3.把剩余时间总的毫秒数转换为天、时、分、秒 (时间戳转换为时分秒)
    转换公式如下: 
          d = parseInt(总秒数/ 60/60 /24);    //  计算天数
          h = parseInt(总秒数/ 60/60 %24)   //   计算小时
          m = parseInt(总秒数 /60 %60 );     //   计算分数
          s = parseInt(总秒数%60);               //   计算当前秒数 
     */
    function countdown(time) {
      var now = new Date().getTime();
      var timer = new Date(time).getTime();
      var countDowntime = timer - now;
      var countHour = new Date(time).getHours();
      //1.计算倒计时秒数
      var seconds = countDowntime / 1000;
      var d = parseInt(seconds / 60 / 60 / 24);
      d = d < 10 ? '0' + d : d;
      var h = parseInt(seconds / 60 / 60 % 24);
      h = h < 10 ? '0' + h : h;
      var m = parseInt(seconds / 60 % 60);
      m = m < 10 ? '0' + m : m;
      var s = parseInt(seconds % 60);
      s = s < 10 ? '0' + s : s;
      //2.将天数,小时,分数,秒数展示在span里
      var hour = document.querySelectorAll(".timmer__unit--hour")[0];
      var minutes = document.querySelectorAll(".timmer__unit--minute")[0];
      var seconds = document.querySelectorAll(".timmer__unit--second")[0];

      hour.innerHTML = h;
      minutes.innerHTML = m;
      seconds.innerHTML = s

      //3.将倒计时几点展示在strong里
      var countH = document.querySelector(".countdown-desc>strong");
      countH.innerHTML = countHour;
    }

    //4.驱动定时函数
    setInterval(function () {
      countdown("2021-05-19 16:00:00");
    }, 1000)
  </script>

</html>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容