ES6随笔--各数据类型的扩展(2)--数值

二进制和八进制表示

二进制0b(或0B)表示;八进制0o(或0O)表示;

这两种字符串转换成十进制数值,使用Number()方法;

Number('0b111')  // 7

Number.isFinite(), Number.isNaN();

Number.isFinite()的参数如果不是数值,一律返回false, Infinity/-Infinity/NaN都返回false

Number.isNaN()对不是NaN的参数一律返回false;

这两个方法与传统全局方法相比没有进行数值转换,对于非数值参数一律返回false

Number.parseInt(), Number.parseFloat();

与原来的全局方法行为相同,这样做是为了减少全局方法,逐步模块化;

Number.isInteger()

判断一个参数是否为整数,如果数据要求精度较高,可能会不准确;

Number.EPSILON

表示1与大于1的最小浮点数之间的差值(常量);实际上是JS能够表示的最小精度;

Number.EPSILON === Math.pow(2, -52)

可以用来设置“可以接受的误差范围”。

安全整数和Number.isSafeInteger()

JS能够精确表示的整数范围在Number.MIN_SAFE_INTEGERNumber.MAX_SAFE_INTEGER之间;这个范围内是“安全的”,否则就会“不安全”,检验方法为Number.isSafeInteger()

但是对于一个运算,则要对运算数和结果都检验,全部在安全整数范围内结果才是可信的。

Math对象的扩展

  1. Math.trunc() 去除小数部分,保留整数部分,相当于
Math.trunc = Math.trunc || function(x) {
  return x < 0 ? Math.ceil(x) : Math.floor(x);
};

非数值会先转换为数值,不能截取数值或空值,返回NaN;

  1. Math.sign():确认一个参数是正数、负数还是零;非数值会先转换为数值;无法转换则返回NaN;相当于
Math.sign = Math.sign || function(x) {
  x = +x; // convert to a number
  if (x === 0 || isNaN(x)) {
    return x;
  }
  return x > 0 ? 1 : -1;
};

返回值包括+1,-1, 0, -0, NaN;

  1. Nath.cbrt(): 计算一个数的立方根;相当于
Math.cbrt = Math.cbrt || function(x) {
  var y = Math.pow(Math.abs(x), 1/3);
  return x < 0 ? -y : y;
};
  1. Math.clz32(),返回一个数的32位无符号整数形式有多少前导零;对空值或其他类型值会先转换为数值再计算;

  2. Math.imul(),返回两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32位的带符号整数;对于那些很大的数的乘法,低位数值往往都是不精确的,Math.imul方法可以返回正确的低位数值.

Math.imul(0x7fffffff, 0x7fffffff) // 1
  1. Math.fround(), 返回一个数的32位单精度浮点数形式。

  2. Math.hypot(), 返回所有参数的平方和的平方根。

4个对数方法:

  1. Math.expm1(), 返回Math.exp(x)-1

  2. Math.log1p(), 返回1+x的自然对数;

  3. Math.log10(), 返回以10为底的x的对数,如果x小于0,则返回NaN;

  4. Math.log2(), 返回以2为底的x的对数,如果x小于0,则返回NaN;

6个双曲函数方法;

指数运算符(**):对于特别大的运算结果,与Math.pow()结果会有细微差异;与等号连用,作为新的赋值符:

a **= 2  // a = a ** 2; a = a * a;
b **= 3  // b = b ** 3; b = b * b * b;

 posted on 2018-06-18 11:12  木汀  阅读(297)  评论(0编辑  收藏  举报