• 【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+ 天,愿每个人的初心都能一直坚持下去!
  • 相关阅读:
    Ubuntu配置sublime text 3的c编译环境
    ORA-01078错误举例:SID的大写和小写错误
    linux下多进程的文件拷贝与进程相关的一些基础知识
    ASM(四) 利用Method 组件动态注入方法逻辑
    基于Redis的三种分布式爬虫策略
    Go语言并发编程总结
    POJ2406 Power Strings 【KMP】
    nyoj 会场安排问题
    Server Tomcat v7.0 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.
    Java的String、StringBuffer和StringBuilder的区别
  • 原文地址:https://www.cnblogs.com/pingan8787/p/13069373.html
Copyright © 2020-2023  润新知