zoukankan      html  css  js  c++  java
  • 【JS】125-重温基础:数字

    本文是 「重温基础」 系列文章的第六篇。 今日感受:自己需要多总结,会有不同收获(比如今晚我做的转正总结)。

    「本章节复习的是JS中的数字类型,涉及的API比较多。」

    前置基础:
    在JavaScript中,数字为双精度浮点类型(即一个数字范围只能在-(253-1)和(253-1)之间),整数类型也一样。 另外数字类型也可以是以下三种符号值:

    • +Infinity : 正无穷;

    • -Infinity : 负无穷;

    • NaN : 非数字(not a number);

    1.数字对象

    JS中内置了Number对象的一些常量属性:

    属性描述
    Number.MAX_VALUE可表示的最大值
    Number.MIN_VALUE可表示的最小值
    Number.NaN特指“非数字”
    Number.NEGATIVE_INFINITY特指“负无穷”;在溢出时返回
    Number.POSITIVE_INFINITY特指“正无穷”;在溢出时返回
    Number.EPSILON表示1和比最接近1且大于1的最小Number之间的差别
    Number.MIN_SAFE_INTEGERJavaScript最小安全整数.
    Number.MAX_SAFE_INTEGERJavaScript最大安全整数.

    注意:以上所有属性都是「不可写,不可枚举,也不可配置」

    • Number.MAX_VALUE

    Number.MAX_VALUENumber 对象的一个「静态属性」,值接近于 1.79E+308。大于 Number.MAX_VALUE 的值代表 "Infinity"。

    let a = 100;
    if(a < Number.MAX_VALUE){
        console.log('success');
    }
    // success
    
    • Number.MIN_VALUE

    Number.MIN_VALUENumber 对象的一个「静态属性」,值接近于 5e-324,是 JavaScript 里最接近 0 的正值,而不是最小的负值。

    let a = 100;
    if(a > Number.MIN_VALUE){
        console.log('success');
    }
    // success
    
    • Number.NaN

    Number.NaN 表示“非数字”,和 NaN 一样。

    • Number.POSITIVE_INFINITY

    Number.POSITIVE_INFINITY 属性表示正无穷大,值同全局对象 Infinity 属性的值相同。

    let a = Number.MAX_VALUE * 2;
    if(a == Number.POSITIVE_INFINITY){
        console.log('success');
    }
    // success
    
    • Number.NEGATIVE_INFINITY

    Number.NEGATIVE_INFINITY 属性表示负无穷大,值和全局对象的 Infinity 属性的「负值」相同。

    let a = - Number.MAX_VALUE * 2;
    if(a == Number.NEGATIVE_INFINITY){
        console.log('success');
    }
    // success
    
    • Number.EPSILON

    Number.EPSILON属性表示 1 与Number可表示的大于 1 的最小的浮点数之间的差值,值接近于 2-52

    let a = 0.1, b = 0.2, c = 0.3;
    let d = (Math.abs(a + b - c) < Number.EPSILON);
    d; // true
    
    • Number.MIN_SAFE_INTEGER

    JS中最小的安全的integer型数字 (-(253 - 1))。

    • Number.MAX_SAFE_INTEGER

    JS中最大的安全的integer型数字 (253 - 1)。

    2.数字方法

    常见的方法有:

    方法描述
    Number.parseFloat()把字符串参数解析成浮点数,和全局方法 parseFloat() 作用一致.
    Number.parseInt()把字符串解析成特定基数对应的整型数字,和全局方法 parseInt() 作用一致.
    Number.isFinite()判断传递的值是否为有限数字。
    Number.isInteger()判断传递的值是否为整数。
    Number.isNaN()判断传递的值是否为 NaN.
    Number.isSafeInteger()判断传递的值是否为安全整数。

    使用方法:

    • Number.parseFloat()

    let a1 = 3.1415, a2 = '3.1114';
    Number.parseFloat(a1);  // 3.1415;
    Number.parseFloat(a2);  // 3.1111;
    parseFloat(a1);         // 3.1415;
    parseFloat(a2);         // 3.1111;
    Number.parseFloat  == parseFloat;// true
    
    • Number.parseInt()

    let a1 = '0110';
    Number.parseInt(a1, 2);     // 6
    Number.parseInt(a1, 10);    // 110
    Number.parseInt = parseInt; // true
    
    • Number.isFinite()

    Number.isFinite(Infinity);  // false
    Number.isFinite(NaN);       // false
    Number.isFinite(-Infinity); // false
    Number.isFinite(0);         // true
    Number.isFinite(2e64);      // true
    Number.isFinite('0');       // false, 全局函数 isFinite('0') 会返回 true
    
    • Number.isInteger()

    Number.isInteger(0);         // true
    Number.isInteger(1);         // true
    Number.isInteger(-100000);   // true
    Number.isInteger(0.1);       // false
    Number.isInteger(Math.PI);   // false
    Number.isInteger(Infinity);  // false
    Number.isInteger(-Infinity); // false
    Number.isInteger("10");      // false
    Number.isInteger(true);      // false
    Number.isInteger(false);     // false
    Number.isInteger([1]);       // false
    
    • Number.isNaN()

    Number.isNaN(NaN);           // true
    Number.isNaN(Number.NaN);    // true
    Number.isNaN(0 / 0)          // true
    // 下面这几个如果使用全局的 isNaN() 时,会返回 true。
    Number.isNaN("NaN");         // false,字符串 "NaN" 不会被隐式转换成数字 NaN。
    Number.isNaN(undefined);     // false
    Number.isNaN({});            // false
    Number.isNaN("blabla");      // false
    // 下面的都返回 false
    Number.isNaN(true);
    Number.isNaN(null);
    Number.isNaN(37);
    Number.isNaN("37");
    Number.isNaN("37.37");
    Number.isNaN("");
    Number.isNaN(" ");
    
    • Number.isSafeInteger()

    Number.isSafeInteger(3);                    // true
    Number.isSafeInteger(Math.pow(2, 53))       // false
    Number.isSafeInteger(Math.pow(2, 53) - 1)   // true
    Number.isSafeInteger(NaN);                  // false
    Number.isSafeInteger(Infinity);             // false
    Number.isSafeInteger("3");                  // false
    Number.isSafeInteger(3.1);                  // false
    Number.isSafeInteger(3.0);                  // true
    

    数字类型原型上的方法:

    方法描述案例
    toExponential()返回一个数字的指数形式的字符串1.23e+2
    toFixed()返回指定小数位数的表示形式var a=123,b=a.toFixed(2)//b="123.00"
    toPrecision()返回一个指定精度的数字。a=123中,3会由于精度限制消失var a=123,b=a.toPrecision(2)//b="1.2e+2"
    • toExponential()

    「指数表示法」返回该数值「字符串」表示形式,可接收一个参数指定小数点后几位数字。

    let a = 99.6633;
    let a1 = '字符串:' + a.toExponential(); // "字符串:9.96633e+1"
    let a2 = '字符串:' + a.toExponential(2);// "字符串:9.97e+1"
    
    • toFixed()

    使用定点表示法来格式化一个数,可接收一个参数指定保留小数点后几位,取值为0-20之间。 注意: 返回的数据类型是字符串类型。

    let a = 1.2345;
    a.toFixed();   // "1"
    a.toFixed(2);  // "1.23"
    
    • toPrecision()

    「指定的精度返」回该数值对象的字符串表示,可接收一个参数,用来指定有效数个数的整数。

    let a = 1.2345;
    let a1 = '字符串:' + a.toPrecision(); // "字符串:1.2345"
    let a2 = '字符串:' + a.toPrecision(1);// "字符串:1"
    let a2 = '字符串:' + a.toPrecision(2);// "字符串:1.2"
    

    3.数学对象

    JS内置的数学对象Math,有很多属性和方法,这里需要注意的是Math对象中的三角函数参数都是「弧度制」的。

    方法描述
    abs()绝对值
    sin(), cos(), tan()标准三角函数;参数为弧度
    asin(), acos(), atan(), atan2()反三角函数; 返回值为弧度
    sinh(), cosh(), tanh()双曲三角函数; 返回值为弧度.
    asinh(), acosh(), atanh()反双曲三角函数;返回值为弧度.
    pow(), exp(), expm1(), log10(), log1p(), log2()指数与对数函数
    floor(), ceil()返回最大/最小整数小于/大于或等于参数
    min(),max()返回一个以逗号间隔的数字参数列表中的较小或较大值(分别地)
    random()返回0和1之间的随机数。
    round(),fround(), trunc()四舍五入和截断函数
    sqrt(), cbrt(), hypot()平方根,立方根,平方参数的和的平方根
    sign()数字的符号, 说明数字是否为正、负、零。
    clz32(),imul()在32位2进制表示中,开头的0的数量.返回传入的两个参数相乘结果的类C的32位表现形式

    完整的描述和使用方法,建议查看 MDN Math

    参考资料

    1.MDN 数字和日期


    个人博客:http://www.pingan8787.com 微信公众号【前端自习课】和千万网友一起,每日清晨,享受一篇前端优秀文章。 目前已连续推送文章 600+ 天,愿每个人的初心都能一直坚持下去!
  • 相关阅读:
    android性能优化之布局优化
    android性能调优之traceview的使用
    android性能优化
    EditText光标居上
    ExecutorService的submit(Runnable x)和execute(Runnable x) 两个方法的本质区别
    android 静默安装
    android 内存优化
    image-webpack-loader在mac或ubuntu报错
    git重命名文件和文件夹
    js判断设备类型
  • 原文地址:https://www.cnblogs.com/pingan8787/p/13069373.html
Copyright © 2011-2022 走看看