数值的扩展

二进制和八进制表示法


  • ES6中提供了二进制和八进制的新写法,二进制以0b开头,八进制以0o开头
0b111110111 === 503 // true
0o767 === 503 // true
  • 也可以使用Number方法将数值转化为十进制
Number('0b111')  // 7
Number('0o10')  // 8

Number.isFinite(), Number.isNaN()


  • 这两个方法作为ES6新增的,前者用于验证数字是否有限,后者用于验证变量是否为NaN,且验证时都不进行强制类型转换。
Number.isFinite(15); // true
Number.isFinite(0.8); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isFinite(-Infinity); // false
Number.isFinite('foo'); // false
Number.isFinite('15'); // false
Number.isFinite(true); // false
Number.isNaN(NaN) // true
Number.isNaN(15) // false
Number.isNaN('15') // false
Number.isNaN(true) // false
Number.isNaN(9/NaN) // true
Number.isNaN('true'/0) // true
Number.isNaN('true'/'true') // true

Number.parseInt(), Number.parseFloat()


  • 这两个方法由全局对象移植到Number对象上,行为完全不变,只是为了逐步实现语言模块化

Number.isInteger()


  • 验证一个数是否为整数

Number.EPSILON


  • 表示一个大于1的数与1做差的极小数约为2^-52
  • 由于浮点数无法进行精确运算,所以该数可用于浮点数运算作比较。

安全整数和 Number.isSafeInteger() ;


  • 安全整数指整数的范围在253~253之间的数(不包括端点)
  • 这个函数是用来验证一个变量是否为安全整数

Math对象的扩展


Math.trunc();
  • 用于去除小数位
Math.trunc(4.1) // 4
Math.trunc(4.9) // 4
Math.trunc(-4.1) // -4
Math.trunc(-4.9) // -4
Math.trunc(-0.1234) // -0
Math.sign()
  • 用于判断数值符号
    • 参数为正数,返回+1;
    • 参数为负数,返回-1;
    • 参数为0,返回0;
    • 参数为-0,返回-0;
    • 其他值,返回NaN。
Math.sign(-5) // -1
Math.sign(5) // +1
Math.sign(0) // +0
Math.sign(-0) // -0
Math.sign(NaN) // NaN
Math.cbrt()
  • 用于计算一个数的立方跟,非数字会进行强制类型转换
Math.cbrt(-1) // -1
Math.cbrt(0)  // 0
Math.cbrt(1)  // 1
Math.cbrt(2)  // 1.2599210498948734
Math.clz32()
  • 在JS中,整数以32为二进制表示,该函数返回数字的前导0的个数;
  • 对于小数只考虑整数部分;
  • 对于非整数,会先进行强制类型转换
Math.imul()
  • 在JS中,当两数之积超过2^53的时候,在低数位会发生不准确的现象,因此出现了该函数,该函数用于返回俩数的积,在运算较小数时,与运算符*并无异同。
Math.fround()
  • 返回一个数的单精度浮点数的值,对于整数返回结果与原数相同,区别主要是那些无法用64个二进制位精确表示的小数。这时,Math.fround方法会返回最接近这个小数的单精度浮点数。
Math.hypot()
  • 返回所有参数平方和的平方根
Math.hypot(3, 4);        // 5
Math.hypot(3, 4, 5);     // 7.0710678118654755
Math.hypot();            // 0
Math.hypot(NaN);         // NaN
Math.hypot(3, 4, 'foo'); // NaN
Math.hypot(3, 4, '5');   // 7.0710678118654755
Math.hypot(-3);          // 3
对数方法
Math.expm1()
  • Math.expm1(x)返回e^x-1;
Math.log1p()
  • Math.log1p(x)返回1+x的自然对数,若想x<-1,则返回NaN
Math.log10()
  • 这个……
Math.log2()
  • 这个也……
双曲函数方法
  • ES6新增了6个函数
    • Math.sinh(x) 返回x的双曲正弦(hyperbolic sine)
    • Math.cosh(x) 返回x的双曲余弦(hyperbolic cosine)
    • Math.tanh(x) 返回x的双曲正切(hyperbolic tangent)
    • Math.asinh(x) 返回x的反双曲正弦(inverse hyperbolic sine)
    • Math.acosh(x) 返回x的反双曲余弦(inverse hyperbolic cosine)
    • Math.atanh(x) 返回x的反双曲正切(inverse hyperbolic tangent)
    • 高中数学差,都不懂……
指数运算符
  • 在ES2016中新增了(**)运算符
let a = 1.5;
a **= 2;
// 等同于 a = a * a;

let b = 4;
b **= 3;
// 等同于 b = b * b * b;
  • 注意,在 V8 引擎中,指数运算符与Math.pow的实现不相同,对于特别大的运算结果,两者会有细微的差异。

你可能感兴趣的:(数值的扩展)