ES6之数值的扩展

ES6对于数值的扩展大部分是方法,属性会比较少。算法

以前说过,严格模式八进制不能使用前缀0表示,ES6规定必须使用0o。ES6提供了二进制和八进制的新写法:bash

console.log(0b111110111 === 503); // true

console.log(0o767 === 503); // true

 

Number.isFinite(), Number.isNaN():

Number.isFinite()用来检查参数相似是不是数值,不是的都返回false:

console.log(Number.isFinite(15));// true

console.log(Number.isFinite(0.8));// true

console.log(Number.isFinite(NaN));// false

console.log(Number.isFinite('foo'));// false

console.log(Number.isFinite('15'));// false

console.log(Number.isFinite(true));// false

Number.isNaN()用来检查是不是NAN,不是的返回false:

console.log(Number.isNaN(15));// false

console.log(Number.isNaN(NaN));// true
复制代码

须要注意的是,这两个方法和isFinite、isNaN不一样在于,新增的两个方法不会进行Number转成数值:模块化

console.log(isFinite(25)); // true

console.log(isFinite("25")); // true

console.log(Number.isFinite(25)); // true

console.log(Number.isFinite("25")); // false

console.log(isNaN(NaN)); // true

console.log(isNaN("NaN")); // true

console.log(Number.isNaN(NaN)); // true

console.log(Number.isNaN("NaN")); // false

Number.parseInt(), Number.parseFloat():
复制代码

ES6把这两个方法移植到Number对象上面行为保持不变,主要是为了逐步减小全局属性window的方法,让JavaScript逐步模块化。函数

Number.isInteger():ui

判断是否为整数,由于JavaScript内部整数和浮点数采用一样的存储,.0会被视为整数,且参数不是数值的会返回false,还有,JavaScript采用的标准,限制了精确的限度,转成二进制位超过了53个二进制位,超过就会被丢弃,超过限制的会自动转成0:spa

Number.EPSILON:code

以前就分享过,全部的程序计算都有一些偏差的存在,好比:cdn

console.log(0.1 + 0.2);//0.30000000000000004对象

EPSILOW就是用来设置偏差可以接受的范围,解释起来就是1 与大于 1 的最小浮点数之间的差:ip

function err (l, r) {  

  return Math.abs(l - r) < Number.EPSILON * Math.pow(2, 2);

}

console.log(0.1 + 0.2 === 0.3); // false

console.log(err(0.1 + 0.2, 0.3)); // true

 

Number.isSafeInteger():
复制代码

JavaScript可以准确表示的整数范围是-2^53到2^53之间(不含两个端点),超过就没法精确表示,ES6引入Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER这两个常量,用来表示这个范围的上下限。而这个方法就是用来判断是否落在这个范围内。

Math.trunc():

去除一个数的小数部分,返回整数部分,会先使用Number方法转成数值,而parseInt 函数将其第一个参数转换为字符串,解析它,并返回一个整数或NaN。若是不是NaN,返回的值将是做为指定基数(基数)中的数字的第一个参数的整数:

console.log(parseInt('13.14g'));//13

console.log(Math.trunc('13.14g'));//NaN

console.log(parseInt(6.022e23)); // 6

console.log(Math.trunc(6.022e23)); // 6.022e+23

console.log(parseInt(0.00000060));//6

console.log(Math.trunc(0.00000060));//0 
复制代码

Math.sign():

用来判断一个数究竟是正数、负数、仍是零。对于非数值,会先将其转换为数值。没法转为数值的值,会返回NaN:

整数返回+1

负数返回-1

0返回0

-0返回-0

没法转成数值的返回NaN

Math.cbrt()计算一个数的立方根,对于非数值也是先调用Number方法转成数值。没法转成数值的返回NaN。

Math.clz32()方法将参数转为 32 位无符号整数的形式,而后这个 32 位值里面有多少个前导 0。

Math.imul方法返回两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数。

Math.fround方法返回一个数的32位单精度浮点数形式。

Math.hypot方法返回全部参数的平方和的平方根。

Math.expm1(x)返回 ex - 1,即Math.exp(x) - 1。

Math.log1p(x)方法返回1 + x的天然对数,即Math.log(1 + x)。若是x小于-1,返回NaN。

Math.log10(x)返回以 10 为底的x的对数。若是x小于 0,则返回 NaN。

Math.log2(x)返回以 2 为底的x的对数。若是x小于 0,则返回 NaN。

Math.sinh(x) 返回x的双曲正弦(hyperbolic sine)

Math.cosh(x) 返回x的双曲余弦(hyperbolic cosine)

Math.tanh(x) 返回x的双曲正切(hyperbolic tangent)

Math.asinh(x) 返回x的反双曲正弦(inverse hyperbolic sine)

Math.acosh(x) 返回x的反双曲余弦(inverse hyperbolic cosine)

Math.atanh(x) 返回x的反双曲正切(inverse hyperbolic tangent)

这些方法我以为在写是吧算法的时候去好好了解就行了,如今只要知道有这些东西就行了。

新增指数运算符**,须要注意的是是右结合,多个连用的时候,从右边开始计算:

console.log(2 ** 3 ** 2);//512

相关文章
相关标签/搜索