zoukankan      html  css  js  c++  java
  • 【重温基础】6.数字

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

    系列目录:

    本章节复习的是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_INTEGER JavaScript最小安全整数.
    Number.MAX_SAFE_INTEGER JavaScript最大安全整数.

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

    • 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 数字和日期


    本部分内容到这结束

    Author 王平安
    E-mail pingan8787@qq.com
    博 客 www.pingan8787.com
    微 信 pingan8787
    每日文章推荐 https://github.com/pingan8787/Leo_Reading/issues
    JS小册 js.pingan8787.com

    bg

    个人博客:http://www.pingan8787.com 微信公众号【前端自习课】和千万网友一起,每日清晨,享受一篇前端优秀文章。 目前已连续推送文章 600+ 天,愿每个人的初心都能一直坚持下去!
  • 相关阅读:
    SCI写作经典替换词,瞬间高大上!(转)
    最佳化常用测试函数 Optimization Test functions
    算法复杂度速查表
    VS 代码行统计
    CPLEX IDE 菜单栏语言设置( 中文 英文 韩文 等多国语言 设置)
    如何从PDF文件中提取矢量图
    Matlab无法打开M文件的错误( Undefined function or method 'uiopen' for input arguments of type 'char)
    visual studio 资源视图 空白 解决方案
    MFC DialogBar 按钮灰色不响应
    嗨翻C语言笔记(二)
  • 原文地址:https://www.cnblogs.com/pingan8787/p/11838224.html
Copyright © 2011-2022 走看看