zoukankan      html  css  js  c++  java
  • JavaScript学习笔记--ES6学习(五) 数值的扩展

    ES6 对于数值类型 (Number) 进行了一下扩展:

    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

    2.ES6在Number对象新增了方法:

    (1)Number.isFinite()

      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

    (2)Number.isNaN()

      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()

      ES6 中将全局方法parseInt() 和parseFloat() 移植到了Number对象上,行为完全保持不变:

    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:

      

    Number.isSafeInteger('a') // false
    Number.isSafeInteger(null) // false
    Number.isSafeInteger(NaN) // false
    Number.isSafeInteger(Infinity) // false
    Number.isSafeInteger(-Infinity) // false
    
    Number.isSafeInteger(3) // true
    Number.isSafeInteger(1.2) // false
    Number.isSafeInteger(9007199254740990) // true
    Number.isSafeInteger(9007199254740992) // false
    
    Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1) // false
    Number.isSafeInteger(Number.MIN_SAFE_INTEGER) // true
    Number.isSafeInteger(Number.MAX_SAFE_INTEGER) // true
    Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1) // false

    3.ES6 对Math对象进行了扩展:

     (1)Math.trunc()

      Math.trunc()方法用于去除一个数的小数部分,返回整数部分。对于非数值类型,Math.trunc() 方法内部使用Number() 方法将参数先转为数值,然后再计算。对于无法截取证书的,返回NaN。

    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(NaN);      // NaN
    Math.trunc('foo');    // NaN
      Math.trunc();         // NaN

    (2)Math.sign()

      Math.sign() 方法用来判断一个数到底是整数、负数还是零:

      如果参数为正数,返回+1;参数为负数, 返回 -1;参数为0, 返回0; 参数为-0, 返回 -0; 其他值,返回NaN;

    Math.sign(-5) // -1
    Math.sign(5) // +1
    Math.sign(0) // +0
    Math.sign(-0) // -0
    Math.sign(NaN) // NaN
    Math.sign('foo'); // NaN
    Math.sign();      // NaN

    (3)Math.cbrt()

      Math.cbrt() 方法用于计算一个数的立方根

      Math.clz32() 返回一个数的32为无符号整数形式有多少个前导0:

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

    clz : count leading zero bits in 32-bit binary representations of a number  (计算32位整数的前导0) 

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

    Math.clz32(0) // 32
    Math.clz32(1) // 31
    Math.clz32(1 << 1) // 30
    Math.clz32(1 << 2) // 29
    Math.clz32(1 << 29) // 2

    对于小数,Math.clz32方法只考虑整数部分。

    Math.clz32(3.2) // 30
    Math.clz32(3.9) // 30

    (4)Math.hypot()

      Math.hypot() 方法返回所有参数的平方和的平方根:

    Math.hypot(3, 4);        // 5    3^2 + 4 ^2 = 5^2
    Math.hypot(3, 4, 5);     // 7.0710678118654755
    Math.hypot();            // 0
    Math.hypot(NaN);         // NaN
    Math.hypot(3, 4, 'foo'); // NaN
    Math.hypot(3, 4, '5');   // 7.0710678118654755
    Math.hypot(-3);          // 3

     4.指数运算符

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

      

    2 ** 2 // 4
    2 ** 3 // 8
  • 相关阅读:
    ASP生成静态文件编码为UTF-8格式的HTML文件
    asp图片化电话号码,避免蜘蛛之类爬走用户隐私
    动态上传多个文件(asp)
    简单测试IIS下的UrlRewrite技术
    mac配置tomcat
    CSS盒子
    CSS
    HTML
    从java到python
    HTTP协议
  • 原文地址:https://www.cnblogs.com/JacobQiao/p/6266808.html
Copyright © 2011-2022 走看看