面向对象-包装类,Date和Math对象(七)

包装类

什么是包装类
Number()、String()和Boolean()分别是数字、字符串、布尔值的“包装类”
很多编程语言都有“包装类”的设计,包装类的目的就是为了让基本类型值可以从它们的构造函数的prototype上获得方法

举例

var a = new Number(123);
var b = new String('大白鹅');
var c = new Boolean(true);

a、b、c是基本类型值么?它们和普通的数字、字符串、布尔值有什么区别么?


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        var a = new Number(123);
        var b = new String('大白鹅');
        var c = new Boolean(true);
        
        console.log(a);
        console.log(typeof a);      // object
        console.log(b);
        console.log(typeof b);      // object
        console.log(c);
        console.log(typeof c);      // object

        console.log(5 + a);         // 128
        console.log(b.slice(0, 2)); // '大白'
        console.log(c && true);     // true

        var d = 123;
        console.log(d.__proto__ == Number.prototype);       // true

        var e = '大白鹅';
        console.log(e.__proto__ == String.prototype);       // true
        console.log(String.prototype.hasOwnProperty('toLowerCase'));    // true
        console.log(String.prototype.hasOwnProperty('slice'));          // true
        console.log(String.prototype.hasOwnProperty('substr'));         // true
        console.log(String.prototype.hasOwnProperty('substring'));      // true
    </script>
</body>
</html>

包装类知识总结
Number()、String()和Boolean()的实例都是object类型,它们的PrimitiveValue属性存储它们的本身值;
new出来的基本类型值可以正常参与运算;
包装类的目的就是为了让基本类型值可以从它们的构造函数的prototype上获得方法;

Math(数学)对象

幂和开方:Math.pow()、Math.sqrt()

向上取整和向下取整:Math.ceil()、Math.floor()

四舍五入Math.round()

Math.round()可以将一个数字四舍五入为整数

	console.log(Math.round(3.4)); // 3
	console.log(Math.round(3.5)); // 4
	console.log(Math.round(3.98)); // 4
	console.log(Math.round(3.49)); // 

四舍五入到小数点后某位

例:实现“四舍五入到小数点后某位”;

	//四舍五入
 	console.log(Math.round(3.49));      // 3
    console.log(Math.round(3.51));      // 4

    var a = 3.7554;
	//取到后小数点后的2位
    console.log(Math.round(a * 100) / 100); //3.76

Math.max()和Math.min()

Math.max()可以得到参数列表的最大值

	console.log(Math.max(6, 2, 9, 4)); // 9

Math.min()可以得到参数列表的最小值

	console.log(Math.min(6, 2, 9, 4)); // 

利用Math.max()求数组最大值

Math.max()要求参数必须是“罗列出来”,而不能是数组

apply方法 !它可以指定函数的上下文,并且以数组的形式传入“零散值”当做函数的参数

	var arr = [3, 6, 9, 2];
	var max = Math.max.apply(null, arr);
	console.log(max); // 

随机数Math.random()

Math.random()可以得到0~1之间的小数

为了得到[a, b]区间内的整数,可以使用这个公式:

parseInt(Math.random() * (b - a + 1)) + a

  	console.log(Math.random());
    console.log(Math.random());
    console.log(Math.random());
    console.log(Math.random());

    // 如果要生成[a, b]之内的整数,就要使用公式
    // parseInt(Math.random() * (b - a + 1)) + a

    // [3, 8]
    console.log(parseInt(Math.random() * 6) + 3);

Date(日期)对象

使用new Date()即可得到当前时间的日期对象,它是object类型值

使用new Date(2020, 11, 1)即可得到指定日期的日期对象,注意第二个参数表示月份,从0开始算,11表示12月

也可以是new Date(‘2020-12-01’)这样的写法

日期对象的常见的方法

方法功能
getDate( )得到日期1~31
getDay( )得到星期0~6
getMonth( )得到月份0~11
getFullYear( )得到年份
getHours( )得到小时数0~23
getMinutes得到分钟数0~59
getSeconds得到秒数0~59

时间戳
时间戳表示1970年1月1日零点整距离某时刻的毫秒数

通过getTime()方法或者Date.parse()函数可以将日期对象变为时间戳

通过new Date(时间戳)的写法,可以将时间戳变为日期对象

倒计时案例
2021高考倒计时


<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h1>2021年高考倒计时</h1>
    <h2 id="info"></h2>
    <script>
        var info = document.getElementById('info');

        setInterval(function(){
            // 现在的日期
            var nd = new Date();
            // 目标的日期,5表示六月
            var td = new Date(2021, 5, 7);

            // 毫秒差
            var diff = td - nd;

            // 任务很简单,就是把diff换算为天、小时、分钟、秒
            // 换算为多少天,除以一天的总毫秒数,不就是换算为多少天么
            var day = parseInt(diff / (1000 * 60 * 60 * 24));
            // 零多少小时呢??差的总毫秒数与1天的毫秒数的相除的余数,就是零头的毫秒数
            var hours = parseInt(diff % (1000 * 60 * 60 * 24) / (1000 * 60 * 60));
            // 零多少分钟呢??
            var minutes = parseInt(diff % (1000 * 60 * 60) / (1000 * 60));
            // 零多少秒呢??
            var seconds = parseInt(diff % (1000 * 60 * 60) % (1000 * 60) / 1000);

            
            info.innerText = day + '天' + hours + '时' + minutes + '分' + seconds + '秒';
        }, 1000);
        
    </script>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值