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

前置基础:
在JavaScript中,数字为双精度浮点类型(即一个数字范围只能在-(2-1)和(2-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“。

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

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

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

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

  • Number.POSITIVE_INFINITY

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

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

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

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

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

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

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

  • Number.MAX_SAFE_INTEGER

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

2.数字方法

常见的方法有:

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

使用方法:

  • Number.parseFloat()
  1. let a1 = 3.1415, a2 = '3.1114';
  2. Number.parseFloat(a1); // 3.1415;
  3. Number.parseFloat(a2); // 3.1111;
  4. parseFloat(a1); // 3.1415;
  5. parseFloat(a2); // 3.1111;
  6. Number.parseFloat == parseFloat;// true
  • Number.parseInt()
  1. let a1 = '0110';
  2. Number.parseInt(a1, 2); // 6
  3. Number.parseInt(a1, 10); // 110
  4. Number.parseInt = parseInt; // true
  • Number.isFinite()
  1. Number.isFinite(Infinity); // false
  2. Number.isFinite(NaN); // false
  3. Number.isFinite(-Infinity); // false
  4. Number.isFinite(0); // true
  5. Number.isFinite(2e64); // true
  6. Number.isFinite('0'); // false, 全局函数 isFinite('0') 会返回 true
  • Number.isInteger()
  1. Number.isInteger(0); // true
  2. Number.isInteger(1); // true
  3. Number.isInteger(-100000); // true
  4. Number.isInteger(0.1); // false
  5. Number.isInteger(Math.PI); // false
  6. Number.isInteger(Infinity); // false
  7. Number.isInteger(-Infinity); // false
  8. Number.isInteger("10"); // false
  9. Number.isInteger(true); // false
  10. Number.isInteger(false); // false
  11. Number.isInteger([1]); // false
  • Number.isNaN()
  1. Number.isNaN(NaN); // true
  2. Number.isNaN(Number.NaN); // true
  3. Number.isNaN(0 / 0) // true
  4. // 下面这几个如果使用全局的 isNaN() 时,会返回 true。
  5. Number.isNaN("NaN"); // false,字符串 "NaN" 不会被隐式转换成数字 NaN。
  6. Number.isNaN(undefined); // false
  7. Number.isNaN({}); // false
  8. Number.isNaN("blabla"); // false
  9. // 下面的都返回 false
  10. Number.isNaN(true);
  11. Number.isNaN(null);
  12. Number.isNaN(37);
  13. Number.isNaN("37");
  14. Number.isNaN("37.37");
  15. Number.isNaN("");
  16. Number.isNaN(" ");
  • Number.isSafeInteger()
  1. Number.isSafeInteger(3); // true
  2. Number.isSafeInteger(Math.pow(2, 53)) // false
  3. Number.isSafeInteger(Math.pow(2, 53) - 1) // true
  4. Number.isSafeInteger(NaN); // false
  5. Number.isSafeInteger(Infinity); // false
  6. Number.isSafeInteger("3"); // false
  7. Number.isSafeInteger(3.1); // false
  8. 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()

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

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

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

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

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

  1. let a = 1.2345;
  2. let a1 = '字符串:' + a.toPrecision(); // "字符串:1.2345"
  3. let a2 = '字符串:' + a.toPrecision(1);// "字符串:1"
  4. 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
ES小册 js.pingan8787.com