JS 自带两个「工具箱」:Math(数学计算,不用 new 直接开箱用)和 Date(日期时间,必须 new 一个出来)。今天重点两个坑:toFixed 吐出来的是字符串、月份从 0 开始要 +1。
| 方法 | 干嘛的 | 例子 |
|---|---|---|
| Math.floor | 往下取整(扔小数) | floor(5.6)=5 |
| Math.ceil | 往上取整(多1) | ceil(5.1)=6 |
| Math.round | 四舍五入 | round(5.5)=6 |
| Math.random | 0到1之间随机小数 | 含0不含1 |
| Math.max/min | 一堆数里最大/最小 | max(1,9,3)=9 |
如果你把 toFixed 的结果接着做加法,就会变成字符串拼接。因为 num.toFixed(2) 虽然看着像数字,其实是字符串。要继续算数得先 Number() 转一下。
let num = 3.14159; num.toFixed(2); // 保留两位 → "3.14",但吐出来的是字符串
function getRndInteger(min, max) {
// random出0~1小数,乘个数,再向下取整,最后加起始
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// max-min+1 是关键:让最大最小都有机会被抽到
let time = new Date(); // 新建一个"现在"的时间对象 time.getFullYear(); // 年 time.getMonth() + 1; // 月是0~11,必须+1才是真实月 time.getDate(); // 几号 time.getDay(); // 星期(周日0~周六6)
如果你直接打印 getMonth(),就会比真实月份少 1。因为它返回 0~11(0就是1月)。这是新手必踩坑,取月一律 +1。
new Date().getTime(); // 写法1:拿时间戳 +new Date(); // 写法2:加号简写 Date.now(); // 写法3:最推荐
① 用在哪:抽奖随机数、倒计时取当前时间、金额保留两位小数、时间戳做排序。
② 常见坑:toFixed() 结果当数字用拼出字符串;getMonth() 忘了 +1 月份少 1。
③ 怎么解决:toFixed 后 Number() 转一下;月份一律 getMonth()+1;随机数套公式 floor(random*(max-min+1))+min。