ES6 数值的拓展笔记

1.二进制和八进制表示法

  ES6提供了二进制和八进制数值的新写法,分别用前缀0b(或0B)  和 0O(或oO)表示。

  如果要将0b和0O的前缀字符串数值转为十进制,要使用Number方法。

 

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

  Number.isFinite()用来检查一个数值是否为有限的,既不是Infinity。如果参数类型不是数值,一律返回false。

  Number.isNaN()  用来检查一个值是否为NaN

  与传统的全局方法isFinite()和isNaN()区别在于:

    传统方法先调用Number()  将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效

isFinite(25) // true
isFinite("25") // true
Number.isFinite(25) // true
Number.isFinite("25") // false

isNaN(NaN) // true
isNaN("NaN") // true
Number.isNaN(NaN) // true
Number.isNaN("NaN") // false
Number.isNaN(1) // false

 

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

  es6将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为保持不变

 

4. Number.isInteger()

  用来判断一个数值是否为整数。如果对于数据精度要求较高,不建议使用Number.isInteger()判断一个数值是否为整数。

 

5.Number.EPSILON

  es6在Number对象上面,新增一个极小的常量Number.EPSILON。根据规格,它表示1与大于1的最小浮点数之间的差。

  对于64为浮点数来说,大于1的最小浮点数相当于二进制的1.00..001,小数点后面连续51个零。这个值减去1之后,就等于2的-52次方。

   Number.EPSILON可以用来设置“能够接受的误差范围”。

 

6.安全整数和Number.isSafeInteger()

  JavaScript 能够准确表示的整数范围在-2^532^53之间(不含两个端点),超过这个范围,无法精确表示这个值。

   ES6 引入了Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER这两个常量,用来表示这个范围的上下限。

   Number.isSafeInteger()则是用来判断一个整数是否落在这个范围之内

 

7.Math对象的扩展

  Math.trunc() 方法用于去除一个数的小数部分,返回整数部分。对于非数值,Math.trunc内部使用Number方法将其转为数值。 对于空值和无法截取整数的值,返回NaN。

  Math.sign() 方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先转为数值。它会返回5种值。参数为正数,返回+1;参数为负数,返回-1;参数为0,返回0;参数为-0,返回-0;其他值,NaN。

  Math.cbrt() 方法用于计算一个数的立方根。对于非数值,该方法也是先用Number方法将其转为数值。

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

      clz32这个函数名来自“count leading zero bits in 32-bit binary repersentation of a number" (计算一个数的32位二进制形式的前导0的个数)的缩写。

      左移运算符(<<)与Math.clz32方法直接相关。

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

  Math.fround() 方法返回一个数的32位单精度浮点数形式。主要作用是将64位双精度浮点数转为32位单精度浮点数。如果小数的精度超过24个二进制位,返回值就会不同于原值,否则返回值不变(即与64位双精度值一致)。

  Math.hypot() 方法返回所有参数的平方和的平方根。Math.hypot(3,4);3的平方加上4的平方,等于5的平方。

 

es6新增4个对数方法

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

(2)Math.log1p(x) 返回1+x的自然对数,即Math.log(1+x)。如果x小于-1,返回Null。

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

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

 

es6新增了6个双曲函数方法

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

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

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

  -Math.asinh(x) 返回x的反双曲正弦

  -Math.acosh(x) 返回x的反双曲余弦

  -Math.atanh(x) 返回x的反双曲正切

 

8.指数运算

  es2016新增了一个指数运算符(**) ,这个运算符的一个特点是右结合。多个指数运算符连用时,是从最右边开始计算的。如2**2 // 4        2**3 //8   2**3**2相当于2**(3**2)//512 首先计算的是第二个指数运算符**。

  指数运算符可以与等号结合,形成一个新的赋值运算符(**=)

 

let a = 1.5;
a**=2;
// 等同于 a = a*a;

let b = 4;
b**=3;
//等同于b=b*b*b;

 

注意,V8 引擎的指数运算符与Math.pow的实现不相同,对于特别大的运算结果,两者会有细微的差异。

 

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

99 ** 99
// 3.697296376497268e+197

 

 

 

 

 

posted @ 2019-03-02 15:45  小Ling的博客  阅读(205)  评论(0编辑  收藏  举报