JavaScript数字为64位浮点数,需注意精度问题(如0.1+0.2≠0.3);支持+−/%*运算符,隐式转换易出错,推荐显式转换;用Number.isNaN()、isFinite()处理NaN/Infinity;Math对象提供舍入、极值、随机数等方法;小数比较宜用误差容忍,显示用toFixed()。
JavaScript 中的数字处理和数学运算主要依靠内置的 Number 类型、算术运算符以及 Math 对象。关键在于理解 JavaScript 只有一种数字类型(64 位双精度浮点数),没有整型/浮点型区分,因此要注意精度问题(比如 0.1 + 0.2 !== 0.3)。
JavaScript 支持常见的二元算术运算符:
+ 加法(也用于字符串拼接,注意类型隐式转换)- 减法* 乘法/ 除法% 取余(不是取模,对负数结果符号跟随被除数)** 幂运算(ES2016 引入,如 2 ** 3 得 8)注意:运算前会尝试将操作数转为数字,例如 "5" - "2" 得 3,但 "5" + "2" 是字符串拼接得 "52";建议用 Number()、parseInt() 或一元加号 + 显式转换。
无效运算(如 0 / 0、parseInt("abc"))会返回 NaN,而 1 / 0 得 Infinity。它们有特殊行为:
NaN !== NaN,必须用 isNaN() 或更推荐的 Number.isNaN() 判断Infinity 可参与计算(如 Infinity + 1 === Infinity),可用 isFinite() 检查是否为有限数Number(value) 转换并配合 Number.isFinite() 验证有效性,比 parseFloat 更严格(不忽略开头空格或尾部字母)Math 是静态对象,提供大量工具方法:
Math.round(2.6) → 3,Math.floor() 向下,Math.ceil() 向上,Math.trunc() 去小数部分Math.max(1, 5, 3) → 5,支持展开语法 Math.max(...arr)
Math.random() 返回 [0, 1) 的浮点数;获取 [min, max] 整数: Math.floor(Math.random() * (max - min + 1)) + min
Math.abs()、Math.sqrt()、Math.pow()、三角函数(弧度
制)、Math.log() 等由于浮点数存储机制,0.1 + 0.2 === 0.30000000000000004。实用应对方式:
toFixed(n) 格式化(返回字符串,注意四舍五入)Math.abs(a - b) )
decimal.js、big.js)(0.1 * 10 + 0.2 * 10) / 10 === 0.3