美文网首页
es6小知识

es6小知识

作者: 晨曦诗雨 | 来源:发表于2018-12-17 11:47 被阅读0次
    1.二进制和十进制的表示法

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

    Number('0b111') // 7
    Number('0o10') // 8

    2.在Number对象上,新提供了Number.isFinite()和Number.isNaN()两个方法。

    Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity。

    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.isFinite一律返回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
    

    如果参数类型不是NaN,Number.isNaN一律返回false。

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

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

    // ES5的写法
    parseInt('12.34') // 12
    parseFloat('123.45#') // 123.45
    
    // ES6的写法
    Number.parseInt('12.34') // 12
    Number.parseFloat('123.45#') // 123.45
    

    这样做的目的,是逐步减少全局性方法,使得语言逐步模块化。

    Number.parseInt === parseInt // true
    Number.parseFloat === parseFloat // true
    
    4.Number.isInteger()

    Number.isInteger()用来判断一个数值是否为整数。

    5.JavaScript 内部,整数和浮点数采用的是同样的储存方法,所以 25 和 25.0 被视为同一个值。
    Number.isInteger(25) // true
    Number.isInteger(25.0) // true
    

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

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

    ES6 引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER这两个常量,用来表示这个范围的上下限。
    这个函数的实现很简单,就是跟安全整数的两个边界值比较一下。(与上面的俩个值进行比较,在这个范围之内则为true)

    7.Math 对象的扩展

    ES6 在 Math 对象上新增了 17 个与数学相关的方法。所有这些方法都是静态方法,只能在 Math 对象上调用。

    Math.trunc() §

    Math.trunc方法用于去除一个数的小数部分,返回整数部分。

    Math.trunc(4.1) // 4
    

    对于非数值,Math.trunc内部使用Number方法将其先转为数值。

    Math.trunc('123.456') // 123
    Math.trunc(true) //1
    Math.trunc(false) // 0
    Math.trunc(null) // 0
    

    对于空值和无法截取整数的值,返回NaN。

    Math.trunc(NaN);      // NaN
    Math.trunc('foo');    // NaN
    Math.trunc();         // NaN
    Math.trunc(undefined) // NaN
    

    对于没有部署这个方法的环境,可以用下面的代码模拟。

    Math.trunc = Math.trunc || function(x) {
      return x < 0 ? Math.ceil(x) : Math.floor(x);
    };
    
    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
    

    如果参数是非数值,会自动转为数值。对于那些无法转为数值的值,会返回NaN。

    Math.sign('')  // 0
    Math.sign(true)  // +1
    Math.sign(false)  // 0
    Math.sign(null)  // 0
    Math.sign('9')  // +1
    Math.sign('foo')  // NaN
    Math.sign()  // NaN
    Math.sign(undefined)  // NaN
    

    对于没有部署这个方法的环境,可以用下面的代码模拟。

    Math.sign = Math.sign || function(x) {
      x = +x; // convert to a number
      if (x === 0 || isNaN(x)) {
        return x;
      }
      return x > 0 ? 1 : -1;
    };
    
    Math.cbrt()

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

    Math.clz32()

    JavaScript 的整数使用 32 位二进制形式表示,Math.clz32方法返回一个数的 32 位无符号整数形式有多少个前导 0。

    Math.imul()

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

    Math.imul(2, 4)   // 8
    Math.imul(-1, 8)  // -8
    Math.imul(-2, -2) // 4
    
    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)
    

    相关文章

      网友评论

          本文标题:es6小知识

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