es6数值
ES6 数值扩展(Number、Math)
一、Number 新增属性
1. 二进制、八进制表示
ES5:十进制 10,十六进制 0xff
ES6:
- 二进制:
0b/0B - 八进制:
0o/0O
const a = 0b1010; // 二进制 → 10
const b = 0o12; // 八进制 → 10
console.log(a === b); // true
二、Number 静态方法
1. Number.isFinite()
判断数值是不是有限数
⚠️ 和全局 isFinite() 区别:不会自动类型转换
Number.isFinite(10); // true
Number.isFinite(Infinity); // false
Number.isFinite('10'); // false(字符串不转换)
2. Number.isNaN()
判断是否严格等于 NaN
⚠️ 全局 isNaN 会强制转类型;Number.isNaN 不转换
Number.isNaN(NaN); // true
Number.isNaN('NaN'); // false
3. Number.parseInt() / Number.parseFloat()
和全局 parseInt、parseFloat 完全一致
目的:语言模块化,把方法迁移到Number对象上
Number.parseInt('12.34'); // 12
Number.parseFloat('12.34'); // 12.34
4. Number.isInteger()
判断是否整数
Number.isInteger(5); // true
Number.isInteger(5.0); // true
Number.isInteger(5.1); // false
Number.isInteger('5'); // false
5. Number.EPSILON
极小常量,表示 1 与大于1的最小浮点数之差
用于浮点数误差判断(解决0.1+0.2 !== 0.3)
console.log(0.1 + 0.2 === 0.3); // false
// 判断两个浮点数是否相等
function equal(a,b){
return Math.abs(a - b) < Number.EPSILON;
}
console.log(equal(0.1+0.2, 0.3)); // true
6. Number.MAX_SAFE_INTEGER / Number.MIN_SAFE_INTEGER
JS安全整数范围:-(2^53 -1) ~ 2^53 -1
Number.MAX_SAFE_INTEGER // 9007199254740991
Number.MIN_SAFE_INTEGER // -9007199254740991
7. Number.isSafeInteger()
判断整数是否在安全范围内
超出范围的整数无法精确存储。
三、Math 对象新增方法(全部静态)
- Math.trunc():去除小数部分,直接取整
Math.trunc(3.9); //3
Math.trunc(-3.9); //-3
- Math.sign():判断正负/零
返回:1正数,-1负数,0,-0,NaN
Math.sign(10); //1
Math.sign(-5); //-1
Math.sign(0); //0
- Math.cbrt() 立方根
Math.cbrt(8); // 2
- Math.hypot() 参数平方和开根号(勾股定理)
Math.hypot(3,4); //5
还有:Math.clz32、Math.imul、Math.expm1、Math.log1p、Math.log2、Math.log10、三角函数sinh/cosh/tanh等,日常使用较少。
四、进制转换小补充
//十进制转其他进制
10..toString(2) //二进制 "1010"
//二进制字符串转回十进制
parseInt('1010',2) //10
五、重点面试区分
Number.isFinite / isFiniteNumber.isNaN / isNaN
核心差异:Number上的方法不进行隐式类型转换
isNaN('abc') //true
Number.isNaN('abc') //false
六、易错点
5.0属于整数,Number.isInteger(5.0) → true- 超过安全整数,数值精度丢失,不要存储超大id,后端id推荐字符串传递
- 浮点数比较不要直接
===,使用Number.EPSILON

浙公网安备 33010602011771号