学习ES6:数值扩展

参考 阮一峰 《ES6 标准入门》

Number对象的扩展

Number.isFinite()

Number.isFinite(number)
Function: 检查参数是否为非无穷数值。
return: boolean

1
2
3
4
5
Number.isFinite(10); //true
Number.isFinite(NaN); //false
Number.isFinite(Infinity); //false
Number.isFinite(-Infinity); //false
Number.isFinite('str'); //false

Number.isNaN()

Number.isNaN(number)
Function: 检查参数是否为NaN。
return: boolean

1
2
3
4
5
6
Number.isNaN(10); //false
Number.isNaN(NaN); //true
Number.isNaN(10/0); //true
Number.isNaN(10/NaN); //true
Number.isNaN('str'); //false
Number.isNaN('10'); //false

Number.isFinite() 与 Number.isNaN() 对应了传统的 isFinite() 与 isNaN(), 其区别在于传统方法先将参数转为数值后再判断,而新方法只对数值有效,非数值参数一律返回false。

传统方法与ES6的区别

Number.isInteger()

Number.isInteger(number)
Function: 检查参数是否为Integer。
return: boolean

该方法只对数值类型有效,非数值一律返回false。
在JS内部,整数和浮点数是同样的储存方法,所以5和5.0视作同一值!

1
2
3
4
5
Number.isInteger(5); //true
Number.isInteger(5.0); //true
Number.isInteger(5.3); //false
Number.isInteger(true); //false
Number.isInteger('5'); //false

Number.isSafeInteger()

Number.isSafeInteger(number)
Function: 检测参数(整数)是否在安全范围内
return: boolean

安全数: number ∈ (-2^53, 2^53)

安全数常量:

  • 最大安全数: Number.MAX_SAFE_INTEGER
  • 最小安全数: Number.MIN_SAFE_INTEGER

如果需要验证运算结果是否在安全整数范围内,不仅要验证运算结果,还要同时验证参与运算的每一个值

1
2
3
4
5
6
7
8
9
10
function trusty (left, right, result) {
if (
Number.isSafeInteger(left) &&
Number.isSafeInteger(right) &&
Number.isSafeInteger(result)
) {
return result;
}
throw new Error('Operation cannot be trusted!');
}

Number.EPSILON

ES6新增的Number对象中的常量: 极小常量

用以在进行相应计算时设置一个误差范围。


Math 对象的扩展

Math.trunc()

Math.trunc(number)
Function: 去除一个数的小数部分,反悔参数值的整数部分。
return: Number

内部会对非数值参数先进行一次数值转换

1
2
3
4
5
Math.trunc(3.2); //3
Math.trunc(-3.2); //-3
Math.trunc("3.2"); //3
Math.trunc(); //NaN
Math.trunc("x"); //NaN

Math.sign()

Math.sign(number)
Function: 判断参数是正数还是负数或者0
return:

参数类型 返回值
正数 1
负数 -1
0 0
-0 -0
其它 NaN
1
2
3
4
5
6
Math.sign(3); //1
Math.sign(-3); //-1
Math.sign(0); //0
Math.sign(-0); //-0
Math.sign("x"); //NaN
Math.sign("3"); //1

Math.cbrt()

Math.cbrt(number)
Function: 计算参数立方根
return: Number

内部会对非数值参数先进行一次数值转换

1
2
3
4
5
Math.cbrt(1); //1
Math.cbrt(-1); //-1
Math.cbrt(2); //1.2599210498948734
Math.cbrt('27'); //3
Math.cbrt("x"); //NaN

Math.hypot()

Math.hypot(number[, number1, number3, …])
Function: 计算所有参数的平方和的算术平方根
return: Number

内部会对所有非数值参数先进行一次数值转换,只要有一个参数转换失败,即返回NaN

1
2
3
4
5
6
7
Math.hypot(1); //1
Math.hypot(-1); //1
Math.hypot(3, 4); //5
Math.hypot(3, '4'); //5
Math.hypot(3, '4'); //NaN
Math.hypot(NaN); //NaN
Math.hypot(); //0

Math.expm1()

Math.expm1(x)
Function: 计算e^x-1, 即Math.exp(x) - 1
return: Number

内部会对所有非数值参数先进行一次数值转换

1
2
3
4
5
6
Math.expm1(1); //1.718281828459045
Math.expm1(0); //0
Math.expm1(-1); //-0.6321205588285577
Math.expm1('1'); //1.718281828459045
Math.expm1('x'); //NaN
Math.expm1('-1'); //-0.6321205588285577

Math.log1p()

Math.log1p(x)
Function: 计算ln(1+x), 即Math.log(x+1),x<-1, 返回NaN
return: Number

内部会对所有非数值参数先进行一次数值转换

Math.log10()

Math.log10(x)
Function: 计算以10为底的x的对数,x<0,返回NaN
return: Number

内部会对所有非数值参数先进行一次数值转换

Math.log2()

Math.log2(x)
Function: 计算以2为底的x的对数,x<0,返回NaN
return: Number

内部会对所有非数值参数先进行一次数值转换

新增三角函数方法

  • Math.sinh(x): 返回x的双曲正弦
  • Math.cosh(x): 返回x的双曲余弦
  • Math.tanh(x): 返回x的双曲正切
  • Math.asinh(x): 返回x的反双曲正弦
  • Math.acosh(x): 返回x的反双曲余弦
  • Math.atanh(x): 返回x的反双曲正切

内部会对所有非数值参数先进行一次数值转换