Math类扩展

Math在ES6中又有所扩展了,都是Math类的静态方法,一一来看看
trunc去除小数部分,保留整数部分eg:
Math.trunc(4.9) // 4
Math.trunc(-4.1) // -4
Math.trunc('123.456') // 123
Math.trunc(true) //1
Math.trunc(false) // 0
Math.trunc(null) // 0
Math.trunc(NaN); // NaN
Math.trunc('foo'); // NaN
Math.trunc(); // NaN
Math.trunc(undefined) // NaN

对于无论小数部分是多少,都将舍去,保留小数点前面的数值,符号保留,在执行该方法前,首先执行的是Number隐式转换为数值,无法转换或是NaN的情况,返回NaN,实际上就是将之前的ceil向下取整与floor向上取整结合eg:

Math.trunc = Math.trunc || function(x) {
  return x < 0 ? Math.ceil(x) : Math.floor(x);
};

sign Math的静态方法,用来判断一个数是正数还是负数或是0及非数值,所以该方法会返回五种值正数返回1,负数返回-1,0返回0,-0返回-0,其他值将通过Number隐式转换,转换后判断结果仍不在上四个值中则会返回NaN eg:
Math.sign(-5) // -1
Math.sign(5) // +1
Math.sign(0) // +0
Math.sign(-0) // -0
Math.sign(NaN) // NaN
Math.sign() // NaN
Math.sign(undefined) // NaN

运行代码 eg:

Math.sign = Math.sign || function(x) {
  x = +x; // convert to a number
  if (x === 0 || isNaN(x)) {
    return x;
  }
  return x > 0 ? 1 : -1;
};

cbrt Math的静态方法,用于计算一个数的立方根eg:
Math.cbrt(-1) // -1
Math.cbrt(0) // 0
Math.cbrt('8') // 2
Math.cbrt('hello') // NaN

首先该方法会将参数通过Number隐式转换到数值,若转换后求值失败则返回NaN 运行代码eg:

Math.cbrt = Math.cbrt || function(x) {
  var y = Math.pow(Math.abs(x), 1/3);
  return x < 0 ? -y : y;
};

hypot Math静态方法,返回所有参数的平方和的平方根eg:
Math.hypot(3, 4); // 5 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.hypot方法会将其转为数值。只要有一个参数无法转为数值,就会返回 NaN
ES6中的指数运算符“**”eg:
2 ** 2 // 4
2 ** 3 // 8

指数运算符与Math.pow的实现不相同,对于特别大的运算结果,两者会有细微的差异。eg:
Math.pow(99, 99)
// 3.697296376497263e+197

99 ** 99
// 3.697296376497268e+197

还提供了双曲函数方法及对数方法

百度已收录
分享