JavaScript Math(算数)

Math 是 JavaScript 内置的"数学工具包",封装了圆周率、取整、随机数、幂与开方、三角函数等常用数学能力。它不是构造函数,不能 new,也不需要创建实例——所有功能都挂在 Math 上直接调用:Math.round、Math.max、Math.random。写游戏、做图表、算金额比例,都离不开它。

Math 是静态工具对象

Math 是一个普通对象,属性与方法直接通过 Math.xxx 访问,无需实例化:

console.log(typeof Math);        // 输出:object
console.log(Math.PI);            // 输出:3.141592653589793
console.log(Math.E);             // 输出:2.718281828459045,自然对数的底
console.log(Math.abs(-8));       // 输出:8,绝对值
console.log(Math.max(3, 9, 5));  // 输出:9,求最大值

想取一堆数字的最大/最小值而它们又在一个数组里时,用展开运算符 Math.max(...arr) 传参。

取整:round / floor / ceil / trunc

四个取整方法各有各的脾气:round 四舍五入、floor 向下、ceil 向上、trunc 直接砍掉小数:

console.log(Math.round(4.6));   // 输出:5,四舍五入
console.log(Math.round(4.4));   // 输出:4
console.log(Math.floor(4.9));   // 输出:4,向下取整(往小走)
console.log(Math.ceil(4.1));    // 输出:5,向上取整(往大走)
console.log(Math.floor(-4.3));  // 输出:-5,负数也"向下"
console.log(Math.trunc(-4.3));  // 输出:-4,trunc 只是砍掉小数部分

分页计算"总页数 = Math.ceil(总数 / 每页数)"是最典型的 ceil 用法。

随机数 random

random() 返回 [0,1) 之间的小数,永远到不了 1;想得到整数要配合 floor:

console.log(Math.random());              // 输出:0.437...(每次运行都不同)
let dice = Math.floor(Math.random() * 6) + 1;   // 1~6 的整数,掷骰子
console.log(dice);                       // 输出:1~6 之间的随机整数
function randInt(min, max) {             // 通用:闭区间 [min, max] 的整数
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(randInt(1, 100));            // 输出:1~100 之间的随机整数

套路是固定的:先乘区间宽度、再 floor 向下取整、最后加起始值。

幂、开方与对数

pow 求幂、sqrt 开平方、cbrt 开立方,指数的负数和分数也没问题:

console.log(Math.pow(2, 10));    // 输出:1024,2 的 10 次方
console.log(Math.pow(16, 0.5));  // 输出:4,即开平方
console.log(Math.sqrt(81));      // 输出:9
console.log(Math.cbrt(27));      // 输出:3
console.log(Math.hypot(3, 4));   // 输出:5,勾股定理求斜边

注意 Math.sqrt(-1) 不会报错,而是返回 NaN,使用时先判断入参是否非负。

三角函数与角度换算

sin、cos、tan 的参数都是弧度,不是角度;角度转弧度要乘以 Math.PI/180:

function toRad(deg) { return deg * Math.PI / 180; }
console.log(Math.sin(toRad(30)));   // 输出:0.49999999999999994,接近 0.5
console.log(Math.cos(toRad(60)));   // 输出:0.5000000000000001
console.log(Math.tan(toRad(45)));   // 输出:0.9999999999999999,接近 1
console.log(Math.round(Math.sin(toRad(30)) * 100) / 100); // 输出:0.5,四舍五入消浮点误差

浮点数精度误差是二进制表示的天性,需要精确展示时记得用 toFixed 或四舍五入兜底。

小结:Math 是静态工具对象,直接 Math.方法() 使用;取整按需选 round/floor/ceil/trunc;随机整数用 floor(random()*范围)+起点 的套路;幂、开方、三角函数一应俱全,但三角函数的入参是弧度,别忘了先做角度换算。

笔记加载中…