Java教程

JavaScript进阶八(内置对象一Math对象与Date对象)

本文主要是介绍JavaScript进阶八(内置对象一Math对象与Date对象),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 一、什么是内置对象
  • 二、Math对象
    • 1、圆周率
    • 2、绝对值
    • 3、返回x的y次方
    • 4、返回x的算术平方根
    • 5、返回随机数
      • (1)案例1
      • (2)案例2
      • (3)案例3
      • (4)案例4
    • 6、取整
      • (1)Math.floor(x)
      • (2)Math.ceil(x)
      • (3)Math.round(x)
    • 7、最大值与最小值
      • (1)最大值
      • (2)最小值
        • 案例
  • 三、Date对象
    • 1、构造方法
      • (1)无参构造
      • (2)有参构造
    • 2、日期格式化
    • 3、获取日期的总的毫秒形式
    • 4、转换格式
    • 5、案例一(倒计时)
    • 6、案例二(三天打鱼,两天晒网)


一、什么是内置对象

JavaScript中的对象分为三种:自定义对象、内置对象、浏览器对象。
内置对象就是指JS语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法)。可以帮助我们快速开发。包括Math、Date、Array等。

二、Math对象

它是内置对象,不是构造函数,所以不需要new来调用,具有数学常数和函数的属性和方法,直接使用里面的属性和方法就行,跟数学相关的运算(求绝对值、取整、最大值等)可以使用Math中的成员。

1、圆周率

Math.PI

console.log(Math.PI);
//输出
3.141592653589793

2、绝对值

Math.abs(x)

console.log(Math.abs(-1))//绝对值,结果为1
console.log(Math.abs('-1'));//结果为1,隐式转换,会把字符串型-1转换为数字型
console.log(Math.abs('张三'));//结果为NaN

3、返回x的y次方

Math.pow(x,y)

console.log(Math.pow(2,2));//结果为4

4、返回x的算术平方根

Math.sqrt(x)

console.log(Math.sqrt(4));//结果为2
console.log(Math.sqrt(9));//结果为3

5、返回随机数

Math.random(),返回一个随机的小数,它的范围是[0,1),这个方法里不跟参数

console.log(Math.random());//结果为0.016698923240751062

(1)案例1

得到两个数之间的随机整数并且包含这两个整数

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

(2)案例2

随机点名

//随机点名
function getRandom(min,max){
    return Math.floor(Math.random() * (max-min+1)) + min;
}
var student = ['张三','李四','王五','赵六'];

console.log(student[getRandom(0,(student.length-1))]);

(3)案例3

猜数字游戏

// 程序随机生成一个1~100之间的数字,并让用户输入一个数字
// 1、如果大于该数字,就提示,数字大了,继续猜
// 2、如果小于该数字,就提示,数字小了,继续猜
// 3、如果等于该数字,就提示猜对了,结束程序
function getRandom(min,max){
    return Math.floor(Math.random() * (max-min+1)) + min;
}
var random = getRandom(1,100);
while(true){
    var x = prompt("请输入一个数,看能不能猜对它");
    if(x > random){
        alert("数字大了,继续猜");
    }else if(x < random){
        alert("数字小了,继续猜");
    }else{
        alert("您猜对了");
        break;
    }
}

(4)案例4

猜数字游戏升级版

//要求用户猜1~50之间的一个数字,但是只有10次猜的机会
function getRandom(min,max){
    return Math.floor(Math.random() * (max-min+1)) + min;
}
var random = getRandom(1,50);
for(var i = 1;i < 11;i++){
    var x = prompt("请输入一个数,看能不能猜对它");
    if(x > random){
        alert("数字大了,继续猜");
    }else if(x < random){
        alert("数字小了,继续猜");
    }else{
        alert("您猜对了");
        break;
    }
}

6、取整

(1)Math.floor(x)

向下取整,往最小了取值,返回小于或等于x的最大整数。

console.log(Math.floor(1.8));//结果为1

(2)Math.ceil(x)

向上取整,往最大了取整,函数返回大于或等于x的最小整数。

console.log(Math.ceil(1.1));//结果为2

(3)Math.round(x)

四舍五入取整

console.log(Math.round(1.3));//结果为1,四舍五入取整
console.log(Math.round(-1.1));//结果为-1
console.log(Math.round(-1.5));//结果为-1,其他数字都是四舍五入,但是.5特殊,它往大了取,所以当为负数是,取-1

7、最大值与最小值

(1)最大值

Math.max():返回参数中的最大值

console.log(Math.max(1,99,3));//求最大值,会输出99
console.log(Math.max(1,'张三'));//如果有非数字型,会返回NaN
console.log(Math.max());//如果什么都不写,会输出-Infinity

(2)最小值

Math.min():返回参数中的最小值

console.log(Math.min(1,99,3));//求最小值,会输出1
console.log(Math.min(1,'张三'));//如果有非数字型,会返回NaN
console.log(Math.min());//如果什么都不写,会输出-Infinity

案例

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

var myMath = {
    PI: 3.1415926,
    max:function(){
       var max = arguments[0];
       for (var i = 1;i < arguments.length;i++){
           if(arguments[i] > max){
              max = arguments[i];
        }
      }
      return max;
    },
    min:function(){
       var min = arguments[0];
       for (var i = 1;i < arguments.length;i++){
           if(arguments[i] < min){
               min = arguments[i];
            }
       }
       return min;
    },
}
console.log(myMath.PI);
console.log(myMath.max(1,2,3));
console.log(myMath.min(1,2,3));
//结果为
3.1415926
3
1

三、Date对象

1、构造方法

Date()是一个构造函数,获取当前时间必须实例化,即必须使用new来调用创建我们的日期对象。

(1)无参构造

如果没有参数,返回当前系统的当前时间

var date = new Date();
console.log(date);
//结果为:
2021-12-02T07:28:25.983Z//时间会比当前时间少八个小时,这是由于时区的不同造成的

(2)有参构造

如果括号里面有参数,则返回参数里面的时间,具体形式如下:

数字型:new Date(y,M,d,h,m,s):带参的构造,参数是年、月、日、时、分、秒
字符串型:new Date(dateString): 参数是日期字符串

注意:月份的整数值,从 0(1月)到 11(12月)

var date1 = new Date(2021,12,2,15,33,33);
console.log(date1);//输入12月,返回的多了一个月
var date2 = new Date('2021-12-2 12:12:12');
console.log(date2);
//输出为:
2022-01-02T07:33:33.000Z//输出的月份多了一个月,时间与当前时间相比少了八小时
2021-12-02T04:12:12.000Z//月份正确,但时间依旧与当前时间相比少八小时

2、日期格式化

需要获取日期指定的部分时,要使用下列方法:

A、getFullYear():获取4位年份
B、getMonth():获取0~11之间的月份
C、getDate():获取日期(一个月中的第几天)
D、getDay():获取星期几(一周中的第几天),0为周天
E、getHours():获取小时数
F、getMinutes():获取分钟数
G、getSeconds():获取秒钟数
H、getMilliseconds() :返回指定日期对象的毫秒数

//格式化日期
var date = new Date();
console.log(date.getFullYear());//返回当前日期的年
console.log(date.getMonth());//返回当前月份(0-11),所以会小一个月
console.log(date.getDate());//返回几号
console.log(date.getDay());//返回周几,它的周日是0,其他正常
//格式化日期 时分秒
var date = new Date();
console.log(date.getHours());//时
console.log(date.getMinutes());//分
console.log(date.getSeconds());//秒
console.log(date.getMilliseconds());//毫秒
//输出为:
2021
11
2
4
15
52
41
525

举例:我们写一个2021年12月2日星期四

//我们写一个2021年12月2日星期四
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var dates = date.getDate();
var day = date.getDay();
var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];

console.log("今天是:"+year+"年"+month+"月"+dates+"日 "+arr[day]);//由于day输出的是星期索引,不符合我们需要得到星期几的习惯,所以我们采取数组的方式
//输出为:
今天是:2021年12月2日 星期四

举例:要求封装一个函数返回当前的时分秒 格式 00:00:00

//要求封装一个函数返回当前的时分秒 格式 08:08:08
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
}
console.log(getTime());
//输出为:
16:25:35

3、获取日期的总的毫秒形式

Date对象是基于1970年1月1日(世界标准时间)起的毫秒数,我们经常利用总的毫秒数来计算时间,因为它更加精确。

valueOf()
getTime()
+new Date()
Date.now()

//获得Date总的毫秒数(时间戳) 不是当前时间的毫秒数,而是距1970年1月1日过了多少毫秒数
//1、通过valueOf() getTime()
var date = new Date();
console.log(date.valueOf());//我们现在时间距离1970年1月1日总的毫秒数
console.log(date.getTime());
//2、简单的写法(最常用的写法)
var date1 = +new Date();
console.log(date1);
//3、H5新增的 获得总的毫秒数(老版本可能不适用)
console.log(Date.now());
//输出为:
1638433853305
1638433853305
1638433853312
1638433853312

4、转换格式

toDateString():将日期转为字符
toLocaleDateString():将日期转换为本地日期格式的字符串

var date = new Date();
console.log(date.toDateString());
console.log(date.toLocaleDateString());
//输出为:
Thu Dec 02 2021
2021-12-2

5、案例一(倒计时)

我们离2022年1月1日还有多少天
核心算法:输入的时间减去现在的时间就是剩余时间,用时间戳来做,用户输入时间总的毫秒数减去现在时间的毫秒数,得到的就是剩余时间的毫秒数,再把剩余时间总的毫秒数转换为天、时、分、秒。

//倒计时
//核心算法:输入的时间减去现在的时间就是剩余时间,用时间戳来做,用户输入时间总的
//毫秒数减去现在时间的毫秒数,得到的就是剩余时间的毫秒数,再把剩余时间总的毫秒数转换为天、时、分、秒
function countDown(time){
    var nowTime = +new Date();//返回的是当前时间总的毫秒数
    var inputTime = +new Date(time);//返回的是用户输入时间总的毫秒数
    var times = (inputTime - nowTime) / 1000;
    var d = parseInt(times / 60 / 60 / 24);//天
    d = d < 10 ? '0' + d : d;
    var h = parseInt(times / 60 / 60 % 24);//时
    h = h < 10 ? '0' + h : h;
    var m = parseInt(times / 60 % 60);//分
    m = m < 10 ? '0' + m : m;
    var s = parseInt(times % 60);//秒
    s = s < 10 ? '0' + s : s;
    return d + '天' + h + '时' + m + '分' + s + '秒';
}
console.log('您离2022年1月1日还有 '+countDown('2022-1-1 00:00:00'));
//输出为:
您离2022年1月1日还有 29天04时09分18秒

6、案例二(三天打鱼,两天晒网)

假定2008-08-08在第一天晒网,请问今天是"打鱼"还是"晒网" 。

//"三天打鱼,两天晒网",假定2008-08-08在"晒网",请问今天是"打鱼"还是"晒网" 
function fish(){
    var nowTime = +new Date();
    var upTime = +new Date('2008-8-8');
    var time = (nowTime - upTime)/1000;
    var n = parseInt(time/60/60/24)%5;
    var arr = ['晒网','晒网','打鱼','打鱼','打鱼'];
    var thing = arr[n];
    console.log(thing);
}
fish();
//输出为:
打鱼
这篇关于JavaScript进阶八(内置对象一Math对象与Date对象)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!