更直观的数值表示法
二进制与八进制新写法
前缀 0b
(二进制)和 0o
(八进制),直接表达数值本质
js
const binary = 0b1101; // 二进制 → 十进制 13
const octal = 0o755; // 八进制 → 十进制 493
用途 :替代ES5混乱的八进制前缀 0
,避免严格模式报错
数值检测的精准化
Number.isFinite()
检查是否为有限数值 (排除 Infinity
和 NaN
)
js
Number.isFinite(42); // true
Number.isFinite(Infinity); // false
比全局 isFinite()
更严格(不会转换非数值类型)
Number.isNaN()
精准识别 NaN
(非数值)
js
Number.isNaN(NaN); // true
Number.isNaN("hello"); // false(全局isNaN会误判)
优势 :避免字符串等类型被误判为 NaN
Number.isInteger()
判断是否为整数(包括 5.0
这类形式)
js
Number.isInteger(5.0); // true
Number.isInteger(5.1); // false
注意 :非数值类型将直接返回 false
安全数值与精度控制
安全整数范围
JS能精确表示的整数范围:-2^53 + 1
到 2^53 - 1
js
Number.MAX_SAFE_INTEGER; // 9007199254740991
Number.MIN_SAFE_INTEGER; // -9007199254740991
Number.isSafeInteger()
检测是否在安全范围内
js
Number.isSafeInteger(9007199254740992); // false(超出精度)
场景:金融计算、大数处理
最小精度常量 Number.EPSILON
解决浮点数计算误差(如 0.1 + 0.2 ≠ 0.3
)
js
function equal(a, b) {{
return Math.abs(a - b) < Number.EPSILON;
}}
equal(0.1 + 0.2, 0.3); // true
原理 :定义一个可接受的误差阈值(约 2.22e-16
)
Math对象的新工具
Math.trunc()
直接切除小数部分(不四舍五入)
js
Math.trunc(3.9); // 3(对比Math.floor() 负数行为不同)
场景:快速取整
Math.sign()
判断数值符号
js
Math.sign(10); // +1
Math.sign(-5); // -1
Math.sign(0); // 0
返回值 :正数=>1
、负数=>-1
、0=>0
立方根计算 Math.cbrt()
js
Math.cbrt(8); // 2(2³=8)
其他一些实用扩展
方法 | 作用 | 示例 |
---|---|---|
Number.parseInt() |
同全局parseInt() (规范化) |
Number.parseInt('10x') → 10 |
Math.fround() |
返回32位单精度浮点数 | Math.fround(1.337) → 1.3370000123291016 |
Math.hypot() |
计算直角三角形的斜边长度 | Math.hypot(3, 4) → 5 |