ES6 数值

JS数值复习

JS支持的整数范围为

-2^53~2^53

能够表示的最大的值为

1.7976931348623157e+308

最小值为5e-324

对象方法说明使用
NumbertoExponential()指数表示法返回该数值字符串表示形式77.123 .toExponential() // 7.7123e+1
NumbertoFixed()保留几位小数(0-20)77.123 .toFixed(5) //77.12300
NumbertoPrecision()保留几位有效数字(0-100)12.988 .toPrecision(6) // 12.9880
NumberMAX_VALUE能表示的最大值Number.MAX_VALUE // 1.7976931348623157e+308
NumberMIN_VALUE能表示的最小值Number.MIN_VALUE // 5e-324
NumberPOSITIVE_INFINITE正无穷Number.POSITIVE_INFINITY // Infinity
NumberNEGATIVE_INFINITY负无穷Number.NEGATIVE_INFINITY //-Infinity
NumberNaN表示非数字Number.NaN // NaN
Mathsin()正弦函数Math.sin(0) // 0
Mathcos()余弦函数Math.cos(0) // 1
Mathtan()正切函数Math.tan(0) // 0
Mathpow()求幂次Math.pow(2, 3) // 8
Mathsqrt()求平方根Math.sqrt(4) // 2
Mathexp()求e的幂次Math.exp(2) // e^2
Mathlog()求对数Math.log(10) // 10的自然对数
MathLN1010的自然对数Math.LN10
MathLN22的自然对数Math.LN2
Mathmax()求最大值Math.max.apply(null, [1,2,3,4,5,6]) // 6
Mathmin()求最小值Math.min(1,2,3) // 1
Mathround()四舍五入求整Math.round(2.51); \\3
Mathceil()向上取整Math.ceil(2.3) // 3
Mathfloor()向下取整Math.floor(2.3) // 2
Mathabs()求绝对值Math.abs(-2.3) // 2.3
MathPI圆周率Math.PI

ES6新增

1. 二进制和八进制表示

ES6允许通过0b前缀表示二进制数,通过0o表示八进制数,注意用0前缀表示八进制已经为ES6所禁止

0b111110111 === 503 // true
0o767 === 503 // true 

2. Number.isFinite(),Number.isNaN()

  • Number.isFinite()

判断数字是否有限

console.log(Number.isFinite(Infinity)); // false 
  • Number.isNaN()

判断是不是非数字

因为NaN无法通过===进行判断,所有需要这个方法。

Number.isNaN("123")// 123 

这两种方法和全局的isNaN和isFinite方法相比,他们只接受数值,而全局的事先,会调用Number()将其他类型的对象转换为数值

3. Number.parseInt(),Number.parseFloat()

和全局方法的parseInt(),parseFloat()一致

4. Number.isInteger()

用来判断一个值是否为整数

注意在js中4和4.0是一样的

Number.isInteger(25.0) //true 

5. Number.EPSILON

一个极小的常量,因为在浮点计算时会发生精度丢失的问题,所以在数与数发生比较时,使用Number.EPSILON可以用于比较

Number.EPSILON.toFixed(20)
// '0.00000000000000022204' 

6. 安全整数与判断isSafeInteger()

console.log(Number.MAX_SAFE_INTEGER);
console.log(Number.MIN_SAFE_INTEGER);
console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER)); 

结果如下:

9007199254740991
-9007199254740991
true 

7. Math对象上的扩展

  • Math.trunc()

去掉小数部分,返回整数部分与Math.floor()效果差不多

console.log(Math.trunc(4.1)); // 4
console.log(Math.trunc('123.45')); // 123 
  • Math.sign()

判断数字的符号

> 0 -> 1

== -0 -> -0

== 0 -> 0

<0 -> -1

其他值 -> NaN

console.log(Math.sign(-5)); // -1
console.log(Math.sign(5)); // 1
console.log(Math.sign(0)); // 0 
  • Math.cbrt()

求立方根

console.log(Math.cbrt(9)); //3 
  • Math.clz32()

求32位二进制数前面有几个0,注意该函数只考虑整数

console.log(Math.clz32(0b00000000000000000000100000000000)); // 20
console.log(Math.clz32(1<<1)); // 30
console.log(Math.clz32(1.2)); // 31 
  • Math.hypot()

求所有数的平方和的平方根

console.log(Math.hypot(3,4,5)); // sqrt( pow(3, 2) + pow(4, 2) + pow(5, 2) )
console.log(Math.hypot.apply(null, [3,4,5])); 

结果如下

7.0710678118654755
7.0710678118654755 
  • 对数方法
console.log(Math.expm1(-1)); //  Math.exp(-1) - 1
console.log(Math.log1p(3)); // Math.log(1 + 3)
console.log(Math.log10(10)); // Math.log(10) / Math.LN10
console.log(Math.log2(4)); // Math.log(10) / Math.LN2 
  • 指数运算符

Node v6.10.0不支持**

V8中pow方法和**计算出的结果会有细微差别

Math.pow(99, 99)
// 3.697296376497263e+197

99 ** 99
// 3.697296376497268e+197 

参考文献


write by jeffwang 2017/03/12