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()*范围)+起点 的套路;幂、开方、三角函数一应俱全,但三角函数的入参是弧度,别忘了先做角度换算。