包装类
什么是包装类
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>