ECMA-262 对内置对象的定义是“任何由 ECMAScript 实现提供、与宿主环境无关,并在 ECMAScript
程序开始执行时就存在的对象”。
具体的内置对象参考这个 <———-👈
8.1 Math
ECMAScript提供了Math对象作为保存数学公式、信息和计算的地方,整个Math对象包含了许多辅助计算的数学方法和属性。
注意
Math 对象上提供的计算要比直接在 JavaScript 实现的快得多,因为 Math 对象上的计算使用了 JavaScript 引擎中更高效的实现和处理器指令。但使用 Math 计算的问题是精度会因浏览器、操作系统、指令集和硬件而异。(简而言之,Math的计算效率通过浏览器主机来确定)
| 属性、方法名 | 功能 |
|---|---|
| Math.PI | 圆周率 |
| Math.floor() | 向下取整 |
| Math.ceil() | 向上取整 |
| Math.round() | 四舍五入版 就近取整 注意 -3.5 结果是 -3 |
| Math.abs() | 绝对值 |
| Math.max()/Math.min() | 求最大和最小值 |
| Math.random() | 获取范围在[0,1)内的随机值 |
注意:
- Math内置对象使用时要带
()
1. min() 和max() 方法
Math 对象也提供了很多辅助执行简单或复杂数学计算的方法。min()和 max()方法用于确定一组数值中的最小值和最大值。这两个方法都接收任意多个参数。
let max = Math.max(3, 54, 32, 16);console.log(max); // 54let min = Math.min(3, 54, 32, 16);console.log(min); // 3
- 54、32 和 16 中,Math.max()返回 54,Math.min()返回 3。
- 使用这两个方法可以避免使用额外的循环和 if 语句来确定一组数值的最大最小值。
当输入数组来确数组内的最大值时
let values = [1, 2, 3, 4, 5, 6, 7, 8];let max = Math.max(...val);
- 要想
max()认识数组,需要在数组名前面加...三个英文句号,用来表示内部元素为数组元素
2. 舍入方法
舍去浮点型小数部分有四种方法:
- `Math.ceil()` 方法始终向上舍入为最接近的整数(1.9=2、1.2=2)- `Math.floor()` 方法始终向下舍入为最接近的整数。(1.9=1、1.2=1)- `Math.round()` 方法执行四舍五入- `Math.fround()` 方法返回数值最接近的单精度(32 位)浮点值表示
用法:
//向上取整,小数全部为进位console.log(Math.ceil(25.9)); // 26console.log(Math.ceil(25.5)); // 26console.log(Math.ceil(25.1)); // 26//四舍五入console.log(Math.round(25.9)); // 26console.log(Math.round(25.5)); // 26console.log(Math.round(25.1)); // 25console.log(Math.fround(0.4)); // 0.4000000059604645console.log(Math.fround(0.5)); // 0.5console.log(Math.fround(25.9)); // 25.899999618530273 \//向下取整,小数全部舍去不进位console.log(Math.floor(25.9)); // 25console.log(Math.floor(25.5)); // 25console.log(Math.floor(25.1)); // 25
- 对于25-26之间的值,
Math.ceil()都会返回 26,而Math.floor()都会返回25
3. random() 方法
Math.random()方法返回一个 0~1 范围内的随机数,其中包含 0 但不包含 1。对于希望显示随机名言或随机新闻的网页,这个方法是非常方便的。
function getRandomInt(min, max) {min = Math.ceil(min);max = Math.floor(max);return Math.floor(Math.random() * (max - min)) + min; //不含最大值,含最小值}
- 这是选择最小数~最大数之间随机选择一个整数,
- 通过向下取整舍去全部小数,所以不会达到最大数值,需要在此基础上
+1
let num = Math.floor(Math.random() * 10 + 1);
- 这是取1~10 内随机数
- 如果要取整数在外层包裹一个
Math.floor()
在此基础上,如果取2~9的话,情况又不一样
let num = Math.floor(Math.random() * 9 + 2);
- 当
Math.random()取0时,由于最小是2,所以需要在当前基础上+2 - 但在最大时,由于最小取值已经是2,最大值*10时会在当前基础上+2,从而会取到11,考虑到范围,需要限制从而将10换成9
function selectFrom(lowerValue, upperValue) { //lowerValue 为最小值 upperValue 为最大值let choices = upperValue - lowerValue + 1; //值为乘区大小return Math.floor(Math.random() * choices + lowerValue);}let num = selectFrom(2,10); //10-2+1=9,所以*9console.log(num); // 2~10 范围内的值,其中包含 2 和 10
- 这里的函数 selectFrom()接收两个参数:应该返回的最小值和最大值。通过将这两个值相减再加 1 得到可选总数,然后再套用上面的公式。于是,调用 selectFrom(2,10)就可以从 2~10(包含)范围内选择一个值了。使用这个函数,从一个数组中随机选择一个元素就很容易
在这个例子中,传给 selecFrom()的第二个参数是数组长度减 1,即数组最大的索引值。let colors = ["red", "green", "blue", "yellow", "black", "purple", "brown"];let color = colors[selectFrom(0, colors.length-1)];
注意 Math.random()方法在这里出于演示目的是没有问题的。如果是为了加密而需要生成随机数(传给生成器的输入需要较高的不确定性),那么建议使用window.crypto. getRandomValues()。
8.2 日期对象
Date 对象和 Math 对象不一样,Date是一个构造函数,所以使用时需要实例化后才能使用其中具体方法和属性。Date 实例用来处理日期和时间
使用Date实例化日期对象
获取当前时间必须实例化:
var now = new Date();
获取指定时间的日期对象
var future = new Date('2021/5/7');
注意:如果创建实例时并未传入参数,则得到的日期对象是当前时间对应的日期对象

- 通过Date实例获取总毫米数
- 总毫秒数的含义
基于1970年1月1日(世界标准时间)起的毫秒数
getTime()
valueOf() - 获取总毫秒数
// 实例化Date对象var now = new Date();// 1. 用于获取对象的原始值console.log(date.valueOf())console.log(date.getTime())// 2. 简单写可以这么做var now = + new Date();// 3. HTML5中提供的方法,有兼容性问题var now = Date.now();
倒计时
<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 nowTime = +new Date(); // 返回的是当前时间总的毫秒数var inputTime = +new Date(time); // 返回的是用户输入时间总的毫秒数var times = (inputTime - nowTime) / 1000; // times是剩余时间总的秒数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(countDown('2019-10-1 18:00:00'));var date = new Date();console.log(date);</script>
