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()

和全局 parseIntparseFloat 完全一致
目的:语言模块化,把方法迁移到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 对象新增方法(全部静态)

  1. Math.trunc():去除小数部分,直接取整
Math.trunc(3.9);   //3
Math.trunc(-3.9);  //-3
  1. Math.sign():判断正负/零
    返回:1正数,-1负数,0-0NaN
Math.sign(10);  //1
Math.sign(-5);  //-1
Math.sign(0);   //0
  1. Math.cbrt() 立方根
Math.cbrt(8); // 2
  1. 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

五、重点面试区分

  1. Number.isFinite / isFinite
  2. Number.isNaN / isNaN
    核心差异:Number上的方法不进行隐式类型转换
isNaN('abc') //true
Number.isNaN('abc') //false

六、易错点

  1. 5.0 属于整数,Number.isInteger(5.0) → true
  2. 超过安全整数,数值精度丢失,不要存储超大id,后端id推荐字符串传递
  3. 浮点数比较不要直接===,使用Number.EPSILON
posted @ 2026-08-03 22:45  alij  阅读(4)  评论(0)    收藏  举报