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

    参考书《ECMAScript 6入门》
    http://es6.ruanyifeng.com/

    数值的扩展

    1.Number对象的扩展
    (1)javascript的全局函数isNaN,isFinite,parseInt,parseFloat转为Number对象的函数

       a. isNaN 与 Number.isNaN

         相同点:都是用来判断数值是否是NaN
         不同点:对于非数值的参数,isNaN会先用Number转化参数为数值类型,如果是NaN则返回true,如果不是,返回false;
                       而Number.isNaN,对于非数值的参数,一律返回false;
         Number.isNaN('NaN') //false 非数值一律返回false
         Number.isNaN(NaN)  //true
         isNaN('NaN') //true 非数值先转化成数值,然后再判断是否为NaN
         isNaN(NaN)  //true

       b. isFinite 与 Number.isFinite

        相同点:都用来判断数值是否有限
        不同点:对于非数值的参数,isFinite会先用Number转化参数为数值类型,如果是有限的则返回true,如果不是,返回false;
                而Number.isFinite,对于非数值的参数,一律返回false;
        isFinite(1) //true
        isFinite('1') //true 非数值先转换成数值,然后再判断是否有限
        Number.isFinite(1) //true
        Number.isFinite('1')//false 非数值一律返回false

       c. parseInt 与 Number.parseInt 行为完全相同,parseFloat与Number.parseFloat 行为完全相同


    (2)Number.isInteger 判断一个数值是否为整数
       Number.isInteger(1)    //true
       Number.isInteger(1.0) //true
       Number.isInteger(1.1)//false
       如果参数的数值太大,十进制数转化成二进制数超过了53位,则不能保证准确性

    (3)Number.EPSLION 常量(js能够表示的最小精度值 = 比1大的最小浮点数 - 1 = Math.pow(2,-52))
       可用来做误差判断,如果计算结果小于这个误差,可以认为是无误差

    (4)安全整数与Number.isSafeInteger
       js 安全整数范围在-Math.pow(2,53)到 Math.pow(2,53)之间,超过这个范围就不准确了
       Number.MAX_SAFE_INTEGER = 9007199254740991 = Math.pow(2,53) - 1
       Number.MIN_SAFE_INTEGER = -9007199254740991 = - Math.pow(2,53) + 1 = - Number.MAX_SAFE_INTEGER
       Number.isSafeInteger函数用来判断参数是否在此范围内
       Number.isSafeInteger(Number.MAX_SAFE_INTEGER) //true
       Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1) //false
       Number.isSafeInteger(Number.MIN_SAFE_INTEGER) //true
       Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1) //false
       当Number.isSafeInteger是用来验证运算结果是否落在安全整数的范围内,不要只验证运算结果,而要同时验证参与运算的每个值,这样更准确

    2.扩展的Math对象
      Math.trunc() : 用于取得一个数的整数部分。如果参数是非数值,则先将参数转换成数值,再取整数部分,若是无法转化成数值的参数,则返回NaN
      Math.trunc(1.23)//1
      Math.trunc(1.78)//1
      Math.trunc('')//0
      Math.trunc(null)//0
      Math.trunc('null')//NaN
      Math.trunc(NaN)//NaN
      Math.trunc('NaN')//NaN
      Math.trunc(true)//1
      Math.trunc('true')//NaN
      Math.sign():用于返回一个数的符号为,若为正,则返回+1;若为负,则返回-1;若为0,则返回0;-0-->-0  +0--->+0;其他值返回NaN
      Math.sign(123)//+1
      Math.sign(-0.56)//-1
      Math.sign(true)//+1
      Math.sign(false) //+1
      Math.sign(null) //0
      参数为非数值时,会先转化成数值,再返回符号
      Math.sign('')//0
      Math.sign(true)//+1
      Math.sign(false) //+1
      Math.sign(null) //0
      参数为非数值时,会先转化成数值,再返回符号,若无法转化成数值,则返回NaN
      Math.sign('true')   //NaN
      Math.sign('false') //NaN
      Math.sign('null') //NaN

      Math.fround() : 用于返回一个数的32位单精度浮点数形式
      Math.log10(X) : 返回以10为底的x的对数 X>0
      Math.log2(X)  :返回以2为底的x的对数  X>0

      Math.hypot()  : 返回所有参数的平方和的平方根
      Math.hypot(3,4) // 5

      Math.sinh()//双曲正弦
      Math.cosh()//双曲余弦
      Math.tanh()//双曲正切
      Math.asinh()//双曲反正弦
      Math.acosh()//双曲反余弦
      Math.atanh()//双曲反正切

      Math.imul() //返回两个整数相乘的结果(参数是32位的整数,结果也是32位的整数)

      Math.clz32() //返回一个32位的整数有多少个前导0(不包含符号位)
      1 == 00000000000000000000000000000001 // true
      Math.clz32(1)//31
      Math.clz32(00000000000000000000000000000001)//31

      Math.cbrt() //返回参数的立方根
      Math.cbrt(27) //3
      Math.cbrt(8) //2

      Math.log1p(x)//返回1+x的自然对数 Math.log1p(x) === Math.log(1+x)   X>-1
      Math.expm1(X)//e^x -1

  • 相关阅读:
    Shell面试题4:扫描网络内存活主机案例
    第三题批量创建特殊要求用户案例
    chpasswd 更简单的更改密码的方式
    30题之第二题
    shell30题之第一题
    2019牛客多校第四场B xor——线段树&&线性基的交
    POJ 2893 M × N Puzzle——八数码有解条件
    2019HDU多校第四场 Just an Old Puzzle ——八数码有解条件
    2019HDU多校第三场F Fansblog——威尔逊定理&&素数密度
    威尔逊定理
  • 原文地址:https://www.cnblogs.com/carolddz/p/8556293.html
Copyright © 2011-2022 走看看