美文网首页
数值的扩展

数值的扩展

作者: 秋天de童话 | 来源:发表于2017-05-16 22:52 被阅读8次

    1、对于二进制和八进制提供了新的写法
    ES6对于二进制和八进制的数值提供了新的写法,分别用0b (或者0B) 和0o (或者0o) 表示。

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

    由于从ES5开始,严格模式中,八进制不再允许使用前缀0来表示,因此在ES6中进一步明确,要用0o来表示。
    如果要将0b和0o前缀的字符串数值转换为十进制,要使用Number方法

    var integerNumber = Number(0b111110111);
    integerNumber // 503
    Number(0b111);  //7
    

    2、Number.isFinite(),Number.isNaN()
    Number.isFinite()方法用来检查一个数值是否是有限的(finite)

    Number.isFinite(15); // true
    Number.isFinite(0.8); // true
    Number.isFinite(NaN); // false
    Number.isFinite(Infinity); // false
    Number.isFinite(-Infinity); // false
    Number.isFinite('foo'); // false
    Number.isFinite('15'); // false
    Number.isFinite(true); // false
    

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

    Number.isNaN(NaN) // true
    Number.isNaN(15) // false
    Number.isNaN('15') // false
    Number.isNaN(true) // false
    Number.isNaN(9/NaN) // true
    Number.isNaN('true'/0) // true
    Number.isNaN('true'/'true') // true
    

    Number.isNaN 以及 Number.isFinite() 与传统的方法isNaN()和isFinite()的区别在于: 传统的方法中,首先将参数转换为数值类型(用Number())然后再判断,而这两个方法只对数值有效,非数值类型一律返回false。

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

    Number.parseInt === parseInt // true
    Number.parseFloat === parseFloat // true
    

    这样做的好处是逐步的替代全局方法。这也是ES6的方向。

    4、Number.isInteger()
    Number.isInteger()用来判断一个值是否为整数。
    在JavaScript的内部,整数和浮点数是使用同样的存储方法,因此3 和3.0 被视为同一个值。 因此需要有一个方法来区分整数和浮点数。
    同样,isInteger()只对数值类型有效:

    Number.isInteger(25) // true
    Number.isInteger(25.0) // true
    Number.isInteger(25.1) // false
    Number.isInteger("15") // false
    Number.isInteger(true) // false
    

    5、Number.EPSILON
    Number.EPSILON是ES6在Number对象上新增的一个极小常量,目的在于为浮点数计算设置一个误差范围。
    由于JavaScript中浮点数的计算并不精确,浮点数的计算误差如果能小鱼Number.EPSILON,就可以认为得到了正确结果,因此, Number.EPSILON的实质是一个可以接受的误差范围。

    6、 安全整数
    JavaScript能够精确标识 的整数范围在 -2^53 到 2^53之间(不含两端),超过这个范围就无法精确表示。
    因此,ES6引入了Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER 这两个常量,用来标识这个范围的上下限。
    Number.isSafeInteger()方法 用来判断一个整数是否在这个安全范围之内,同时,不是number的参数一律返回false:

    7、Math对象的扩展

    1. Math.trunc()
      Math.trunc 用于除去一个数的小数部分,返回整数部分。
    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
    //对于非数值,Math.trunc会内部使用Number将其转为数值
    Math.trunc("123.456");  //123
    //对于空值和无法截取整数的值,返回NaN
    Math.trunc("a");  //NaN
    Math.trunc();  //NaN
    Math.trunc(NaN);  //NaN
    

    2)Math.sign()
    该方法用来判断一个数到底是正数,负数,还是0。有五中返回值。

    Math.sign(23.235); //1
    Math.sign(25); //1
    Math.sign(0); //0
    Math.sign(0.0); //0
    Math.sign(-0.0); //-0
    Math.sign(-0); //-0
    Math.sign(-2); //-1
    Math.sign(-2.983958); //-1
    Math.sign('a'); //NaN
    Math.sign(); //NaN
    Math.sign(NaN); //NaN
    

    参数为正数时,返回1;
    参数为0时,返回0;
    参数为-0时,返回-0;
    参数为负数时,返回-1;
    参数为其他值时,返回NaN。

    3)Math.cbrt()
    该方法用于计算一个数的立方根,等同于Math.pow(n,1/3)方法。

    Math.cbrt(8);  //2
    Math.cbrt(-64);  //-4
    

    //对于非数值,该方法内部也是先使用Number方法将其转化为数值,再进行计算

    Math.cbrt("125");  //5
    Math.cbrt("a");  //NaN
    

    4)Math.hypot()
    该方法用于计算所有参数平方和的平方根。

    Math.hypot(3,4);   //5
    Math.hypot(1,2,3);  //3.741657386773941
    Math.hypot(-5);  //5
    Math.hypot();  //0
    Math.hypot(NaN);  //NaN
    Math.hypot("a");  //NaN
    Math.hypot(3,'4');  //5
    Math.hypot(3,'a');  //NaN
    

    5)Math.clz32()
    32位二进制形式表示

    Math.clz32(0) //32
    Math.clz32(1) //31
    Math.clz32(1000) //22
    Math.clz32(0b01000000000000000000000000000000) //1
    Math.clz32(0b00100000000000000000000000000000) //2
    

    上面的代码中,0的二进制形式全是0,所以有32个前导0;1的二进制形式是0b1,只占1位,所以32位中有31个前导0。

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

    Math.imul(2, 4) // 8  
    Math.imul(-1, 8) // -8  
    Math.imul(-2, -2) // 4  
    

    7)Math.fround()
    Math.fround 方法返回一个数的单精度浮点数形式。
    对于整数来说,Math.fround方法返回结果不会有任何不同,区别主要是那些无法用 64 个二进制位精确表示的小数。这时,Math.fround方法会返回最接近这个小数的单精度浮点数

    Math.fround(0) // 0  
    Math.fround(1) // 1  
    Math.fround(1.337) // 1.3370000123977661  
    Math.fround(1.5) // 1.5  
    Math.fround(NaN) // NaN  
    

    8)对数
    Math.expm1(x) 返回 e^x-1,即Math.exp(x)-1
    Math.log1p(x) 返回 1 + x 的自然对数。
    Math.log10(x) 返回以 10 为底的x的对数。
    Math.log2(x) 返回以 2 为底的 x 的对数

    9)ES6 新增了 6 个三角函数方法。
    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 )

    8、指数运算符
    ES7 新增了一个指数运算符(**),目前Babel 转码器已经支持。

    2 ** 2  //4
    2 ** 3  //8
    
    (**=)
    let a =2;
    a **=2;  // a = a*a;
    
    let b = 3;
    b **=3 // b = b*b*b;
    

    相关文章

      网友评论

          本文标题:数值的扩展

          本文链接:https://www.haomeiwen.com/subject/vnrrxxtx.html