Number 新增方法
Number.parseInt()
ES5 时,是挂载在 window 身上的;ES6 是挂载在 Number 身上
所以,现在 parseInt()
、parseFloat()
移到 Number 对象上,功能不变
// ES5 写法
parseInt('12.34'); // 12
parseFloat('123.45#'); // 123.45
// ES6 写法
Number.parseInt('12.34'); // 12
Number.parseFloat('123.45#'); // 123.45
更新目的:减少全局方法,使语言逐步模块化。其实是同一个函数
Number.parseInt === parseInt; // true
Number.parseFloat === parseFloat; // true
Number.isFinite()
用来检查一个数值是否为有限的,不会进行隐式类型转换
Number.isFinite(15); // true
Number.isFinite(0.8); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isFinite('15'); // false
Number.isFinite(true); // false
是数字就返回 true
,否则返回 false
,不会进行隐式类型转换,NaN
、'3'
都是 false
- ES5 的
window.isFinite()
会进行隐式类型转换;所以这俩函数不是一样的
Number.isFinite == window.isFinite; // false
Number.isNaN()
用来检查一个值是否为 NaN
,不会进行隐式类型转换,只有值严格等于 NaN
时,才会返回 true
- ES5 的
window.isNaN()
会进行隐式类型转换
Number.isNaN(NaN); // true
Number.isNaN(Number.NaN); // true
Number.isNaN(0 / 0); // true
// 以下 window.isNaN() 会返回 true
Number.isNaN("NaN"); // false
Number.isNaN(undefined); // false
Number.isNaN({}); // false
Number.isNaN("blabla"); // false
Number.isInteger()
用来判断一个值是否为整数,不会进行隐式类型转换
需要注意的是,在 JS 中,整数和浮点数是同样的储存方法,所以 3 和 3.0 被视为同一个值
console.log(Number.isInteger(3)); // true
console.log(Number.isInteger(3.0)); // true
console.log(Number.isInteger(3.3)); // false
console.log(Number.isInteger('3')); // false
Math 对象
Math 对象的扩展
Math.trunc()
用于截取数值,保留整数部分
- 对于非数值,会进行隐式类型转换
- 对于空值和无法截取整数的值,返回
NaN
Math.trunc(4.1); // 4
Math.trunc(4.9); // 4
Math.trunc(-4.1); // -4
Math.trunc(-4.9); // -4
Math.trunc(-0.1234); // -0
- 简写:
~~
~~2.3 // 2
~~-2.3 // -2
Math.sign()
- 用于判断一个数是正数、负数、还是零
- 对于非数值,会进行隐式类型转换
- 参数为正数,返回
+1
- 参数为负数,返回
-1
- 参数为
0
,返回0
- 参数为
-0
,返回-0
- 其他值,返回
NaN
Math.sign(-5) // -1
Math.sign(5) // +1
Math.sign(0) // +0
Math.sign(-0) // -0
Math.sign(NaN) // NaN
Math.sign('') // 0
Math.sign(true) // +1
Math.sign(null) // 0
Math.sign('9') // +1
Math.sign('foo') // NaN
Math.sign() // NaN
Math.sign(undefined) // NaN
Math.cbrt()
用于计算一个数的立方根;对于非数值,会进行隐式类型转换
Math.cbrt(-1); // -1
Math.cbrt(0); // 0
Math.cbrt(1); // 1
Math.cbrt(27); // 3
Math.hypot()
返回所有参数的平方和的平方根;对于非数值,会进行隐式类型转换
Math.hypot(3, 4); // 5
Math.hypot(3, 4, 5); // 7.0710678118654755
Math.hypot(); // 0
Math.hypot(NaN); // NaN
Math.hypot(3, 4, 'foo'); // NaN
Math.hypot(3, 4, '5'); // 7.0710678118654755
Math.hypot(-3); // 3