JavaScript 中的数字处理是基础且重大的部分,它涉及数字类型、运算规则、内置方法等内容。下面我们系统梳理 JavaScript 数字相关的核心知识:
一、数字类型本质
JavaScript 中只有一种数字类型 ——64 位双精度浮点数,无论整数、小数都统一用这种格式存储。
这意味着:
- 整数和小数没有类型区分(如 5 和 5.0 本质一样)
- 存在精度限制(对极大 / 极小数字或高精度计算可能有误差)
二、数字的表明方式
1. 十进制(默认)
let a = 123; // 整数
let b = 123.45; // 小数
let c = .45; // 省略整数部分(等价于 0.45)
let d = 123.; // 省略小数部分(等价于 123)
2. 其他进制
- 二进制:前缀 0b 或 0B(0-1)
let bin = 0b1010; // 二进制 1010 → 十进制 10
- 八进制:前缀 0o 或 0O(0-7)
let oct = 0o17; // 八进制 17 → 十进制 15
- 十六进制:前缀 0x 或 0X(0-9, a-f/A-F)
let hex = 0xFF; // 十六进制 FF → 十进制 255
3. 科学计数法
用于表明极大或极小的数字:
let large = 123e5; // 123 × 10⁵ → 12300000
let small = 123e-5; // 123 × 10⁻⁵ → 0.00123
三、算术运算符
运算符 |
说明 |
示例 |
结果 |
+ |
加法 |
2 + 3 |
5 |
– |
减法 |
5 – 2 |
3 |
* |
乘法 |
3 * 4 |
12 |
/ |
除法 |
10 / 2 |
5 |
% |
取余(模运算) |
10 % 3 |
1 |
** |
幂运算(ES6+) |
2 **3 |
8(等价于 Math.pow (2,3)) |
四、特殊数字值
1.Infinity(无穷大)
- 表明超过 JavaScript 最大可表明数字的值
- 特性:
console.log(1 / 0); // Infinity
console.log(Infinity + 1); // Infinity(无穷大+1还是无穷大)
console.log(-Infinity); // 负无穷大(如 -1 / 0)
2.NaN(非数字,Not a Number)
- 表明 “不是有效数字” 的结果(但类型仍为 number)
- 产生场景:
console.log("abc" / 2); // NaN(字符串无法参与除法)
console.log(0 / 0); // NaN(数学上无意义)
- 注意:NaN 不等于任何值(包括自身),需用 Number.isNaN() 检测:
console.log(NaN === NaN); // false
console.log(Number.isNaN(NaN)); // true
五、常用数字处理方法
1. 全局转换函数
- Number():将值转为数字(严格转换)
Number("123"); // 123
Number("123abc"); // NaN(包含非数字字符)
Number(true); // 1(布尔值 true→1,false→0)
- parseInt(str, radix):解析整数(忽略非数字字符,可指定进制)
parseInt("123abc"); // 123(忽略后面的非数字)
parseInt("11", 2); // 3(二进制 "11" 转十进制)
- parseFloat(str):解析浮点数(只支持十进制)
parseFloat("123.45abc"); // 123.45
2.Math对象(核心工具)
Math 是内置对象,提供大量数学运算方法(无需实例化):
方法 |
说明 |
示例 |
结果 |
Math.abs(x) |
取绝对值 |
Math.abs(-5) |
5 |
Math.round(x) |
四舍五入 |
Math.round(2.6) |
3 |
Math.ceil(x) |
向上取整 |
Math.ceil(2.1) |
3 |
Math.floor(x) |
向下取整 |
Math.floor(2.9) |
2 |
Math.max(…nums) |
取最大值 |
Math.max(1, 3, 2) |
3 |
Math.min(…nums) |
取最小值 |
Math.min(1, 3, 2) |
1 |
Math.random() |
生成 [0,1) 随机数 |
Math.random() |
如 0.345 |
Math.pow(x, y) |
x 的 y 次方 |
Math.pow(2, 3) |
8 |
Math.sqrt(x) |
开平方 |
Math.sqrt(16) |
4 |
六、常见陷阱与注意事项
1.** 浮点数精度问题 **:
由于二进制存储特性,部分小数运算会有误差:
console.log(0.1 + 0.2); // 0.30000000000000004(而非 0.3)
解决:用 toFixed() 控制小数位数,或转整数运算。
2.** 字符串与数字的加法 **:
+ 同时用于加法和字符串拼接,需注意类型:
console.log(1 + 2); // 3(数字加法)
console.log("1" + 2); // "12"(字符串拼接)
console.log(+"1" + 2); // 3(用 + 快速转为数字)
3.** 安全整数范围 **:
JavaScript 能准确表明的整数范围是 -2^53 + 1 到 2^53 – 1,超出范围会丢失精度:
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991(2^53 - 1)
大整数需求可用 BigInt 类型(后缀 n):
let big = 9007199254740993n; // BigInt 类型,可准确表明
通过掌握这些基础,你可以应对 JavaScript 中大部分数字处理场景。实际开发中,复杂计算提议结合工具库(如 decimal.js)处理精度问题。