文章目录
- 一、Math 对象属性
- 二、Math 对象方法
- 三、获取指定范围内的随机整数
- 四、其他方法
- 五、基本引用类型小结
- ECMAScript 提供了 Math 对象作为保存数学公式、信息和计算的地方
- Math 对象提供了一些辅助计算的属性和方法
注意:Math 对象上提供的计算要比直接在 JavaScript 实现的快得多,因为 Math 对象上的计算使用了 JavaScript 引擎中更高效的实现和处理器指令。但使用 Math 计算的问题是精度会因浏览器、操作系统、指令集和硬件而异。
一、Math 对象属性
Math 对象有一些属性,主要用于保存数学中的一些特殊值
属 性 | 说 明 |
Math.E | 自然对数的基数 e 的值 |
Math.LN10 | 10 为底的自然对数 |
Math.LN2 | 2 为底的自然对数 |
Math.LOG2E | 以 2 为底 e 的对数 |
Math.LOG10E | 以 10 为底 e 的对数 |
Math.PI | π 的值 |
Math.SQRT1_2 | 1/2 的平方根 |
Math.SQRT2 | 2 的平方根 |
二、Math 对象方法
Math 对象不是构造函数,它具有数学常数和函数的属性和方法。跟数学相关的运算(求绝对值,取整、最大值等)可以使用 Math 中的成员
方法名 | 说明 |
Math.floor() | 向下取整(取小) |
Math.ceil() | 向上取整(取大) |
Math.round() | 四舍五入版 就近取整 注意 -3.5 结果是 -3 |
Math.fround() | 返回数值最接近的单精度(32 位)浮点值表示 |
Math.abs() | 绝对值 |
Math.max() / Math.min() | 求最大和最小值 |
Math.random() | 获取范围在[0,1)内的随机值(始终返回小数) |
Math.max() / Math.min()
let max = Math.max(1, 2, 3, 4);
console.log(max); // 4
let min = Math.min(1, 2, 3, 4);
console.log(min); // 1
//数组中的最大值和最小值
let values = [1, 2, 3, 4, 5, 6, 7, 8];
let max = Math.max(...val);
舍入方法
console.log(Math.ceil(25.9)); // 26
console.log(Math.ceil(25.5)); // 26
console.log(Math.ceil(25.1)); // 26
console.log(Math.round(25.9)); // 26
console.log(Math.round(25.5)); // 26
console.log(Math.round(25.1)); // 25
console.log(Math.round(-25.5)); // -25
console.log(Math.fround(0.4)); // 0.4000000059604645
console.log(Math.fround(0.5)); // 0.5
console.log(Math.fround(25.9)); // 25.899999618530273
console.log(Math.floor(25.9)); // 25
console.log(Math.floor(25.5)); // 25
console.log(Math.floor(25.1)); // 25
random()
console.log(Math.random()); // 随机数:0.8485739886796229
三、获取指定范围内的随机整数
function getRandom(min, max) {
return Math.floor(
Math.random() * (max - min + 1)
) + min;
}
注意:Math.random() 方法在这里出于演示目的是没有问题的。如果是为了加密而需要生成随机数(传给生成器的输入需要较高的不确定性),那么建议使用 window.crypto. getRandomValues() ,后续会在JavaScript api 中介绍
四、其他方法
Math 对象还有很多涉及各种简单或高阶数运算的方法
方 法 | 说 明 |
Math.exp(x) | 返回 Math.E 的 x 次幂 |
Math.expm1(x) | 等于 Math.exp(x) - 1 |
Math.log(x) | 返回 x 的自然对数 |
Math.log1p(x) | 等于 1 + Math.log(x) |
Math.pow(x, power) | 返回 x 的 power 次幂 |
Math.hypot(…nums) | 返回 nums 中每个数平方和的平方根 |
Math.clz32(x) | 返回 32 位整数 x 的前置零的数量 |
Math.sign(x) | 返回表示 x 符号的 1、0、-0 或-1 |
Math.trunc(x) | 返回 x 的整数部分,删除所有小数 |
Math.sqrt(x) | 返回 x 的平方根 |
Math.cbrt(x) | 返回 x 的立方根 |
Math.acos(x) | 返回 x 的反余弦 |
Math.acosh(x) | 返回 x 的反双曲余弦 |
Math.asin(x) | 返回 x 的反正弦 |
Math.asinh(x) | 返回 x 的反双曲正弦 |
Math.atan(x) | 返回 x 的反正切 |
Math.atanh(x) | 返回 x 的反双曲正切 |
Math.atan2(y, x) | 返回 y/x 的反正切 |
Math.cos(x) | 返回 x 的余弦 |
Math.sin(x) | 返回 x 的正弦 |
Math.tan(x) | 返回 x 的正切 |
即便这些方法都是由 ECMA-262 定义的,对正弦、余弦、正切等计算的实现仍然取决于浏览器,因为计算这些值的方式有很多种。结果,这些方法的精度可能因实现而异。
五、基本引用类型小结
JavaScript 中的对象称为引用值,几种内置的引用类型可用于创建特定类型的对象
- 引用值与传统面向对象编程语言中的类相似,但实现不同
- Date 类型提供关于日期和时间的信息,包括当前日期、时间及相关计算
- RegExp 类型是 ECMAScript 支持正则表达式的接口,提供了大多数基础的和部分高级的正则表达式功能
JavaScript 比较独特的一点是,函数实际上是 Function类型的实例,也就是说函数也是对象。因为函数也是对象,所以函数也有方法,可以用于增强其能力
由于原始值包装类型的存在,JavaScript 中的原始值可以被当成对象来使用。有 3 种原始值包装类型:Boolean、Number 和 String。它们都具备如下特点:
- 每种包装类型都映射到同名的原始类型
- 以读模式访问原始值时,后台会实例化一个原始值包装类型的对象,借助这个对象可以操作相应的数据
- 涉及原始值的语句执行完毕后,包装对象就会被销毁
当代码开始执行时,全局上下文中会存在两个内置对象:Global 和 Math。其中,Global 对象在大多数 ECMAScript 实现中无法直接访问。不过,浏览器将其实现为 window 对象。所有全局变量和函数都是 Global 对象的属性。Math 对象包含辅助完成复杂计算的属性和方法。