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;
    

    生如夏花般绚烂,死如秋叶般静美
  • 相关阅读:
    yocto/bitbake 学习资源
    QEMU/KVM学习资源
    ubuntu 中创建和删除用户
    git 重命名本地和远程分支
    Ubuntu 上搭建 FTP 服务器
    gdb 常见用法
    git log 显示与特定文件相关的 commit 信息
    基于 qemu system mode 运行 arm 程序
    基于 qemu user mode 运行 aarch64 程序
    checking in(airport)
  • 原文地址:https://www.cnblogs.com/muTing/p/9191604.html
Copyright © 2011-2022 走看看