zoukankan      html  css  js  c++  java
  • ES6随笔--各数据类型的扩展(2)--数值

    ES6随笔--各数据类型的扩展(2)--数值

    二进制和八进制表示

    二进制0b(或0B)表示;八进制0o(或0O)表示;

    这两种字符串转换成十进制数值,使用Number()方法;

    Number('0b111')  // 7
    

    Number.isFinite(), Number.isNaN();

    Number.isFinite()的参数如果不是数值,一律返回false, Infinity/-Infinity/NaN都返回false

    Number.isNaN()对不是NaN的参数一律返回false;

    这两个方法与传统全局方法相比没有进行数值转换,对于非数值参数一律返回false

    Number.parseInt(), Number.parseFloat();

    与原来的全局方法行为相同,这样做是为了减少全局方法,逐步模块化;

    Number.isInteger()

    判断一个参数是否为整数,如果数据要求精度较高,可能会不准确;

    Number.EPSILON

    表示1与大于1的最小浮点数之间的差值(常量);实际上是JS能够表示的最小精度;

    Number.EPSILON === Math.pow(2, -52)
    

    可以用来设置“可以接受的误差范围”。

    安全整数和Number.isSafeInteger()

    JS能够精确表示的整数范围在Number.MIN_SAFE_INTEGERNumber.MAX_SAFE_INTEGER之间;这个范围内是“安全的”,否则就会“不安全”,检验方法为Number.isSafeInteger()

    但是对于一个运算,则要对运算数和结果都检验,全部在安全整数范围内结果才是可信的。

    Math对象的扩展

    1. Math.trunc() 去除小数部分,保留整数部分,相当于
    Math.trunc = Math.trunc || function(x) {
      return x < 0 ? Math.ceil(x) : Math.floor(x);
    };
    

    非数值会先转换为数值,不能截取数值或空值,返回NaN;

    1. Math.sign():确认一个参数是正数、负数还是零;非数值会先转换为数值;无法转换则返回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;
    };
    

    返回值包括+1,-1, 0, -0, NaN;

    1. Nath.cbrt(): 计算一个数的立方根;相当于
    Math.cbrt = Math.cbrt || function(x) {
      var y = Math.pow(Math.abs(x), 1/3);
      return x < 0 ? -y : y;
    };
    
    1. Math.clz32(),返回一个数的32位无符号整数形式有多少前导零;对空值或其他类型值会先转换为数值再计算;

    2. Math.imul(),返回两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32位的带符号整数;对于那些很大的数的乘法,低位数值往往都是不精确的,Math.imul方法可以返回正确的低位数值.

    Math.imul(0x7fffffff, 0x7fffffff) // 1
    
    1. Math.fround(), 返回一个数的32位单精度浮点数形式。

    2. Math.hypot(), 返回所有参数的平方和的平方根。

    4个对数方法:

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

    2. Math.log1p(), 返回1+x的自然对数;

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

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

    6个双曲函数方法;

    指数运算符(**):对于特别大的运算结果,与Math.pow()结果会有细微差异;与等号连用,作为新的赋值符:

    a **= 2  // a = a ** 2; a = a * a;
    b **= 3  // b = b ** 3; b = b * b * b;
    

    生如夏花般绚烂,死如秋叶般静美
  • 相关阅读:
    福大软工1816 · 第五次作业
    团队编程
    结队第一次作业
    词频统计 ——Java
    Alpha 冲刺 (3/10)
    Alpha 冲刺 (2/10)
    Alpha 冲刺 (1/10)
    2018软工实践第七次作业——需求报告分析
    福大软工 · 第八次作业(课堂实战)- 项目UML设计(团队)
    2018软工实践第六次作业——团队选题报告
  • 原文地址:https://www.cnblogs.com/muTing/p/9191604.html
Copyright © 2011-2022 走看看