【ES6】数值Number+ES6扩展+Math

num表示实例,Number表示构造函数

Number

num.constructor:返回其构造函数

num.prototype:可为原型添加方法和属性

num.toString(radix):把数字转换为字符串,使用指定的基数,默认10。radix为2,即将num转为二进制

        let b = 2
        b.toString(2) // 10

num.valueOf:返回一个 Number 对象的基本数字值。

num.toFixed(n):保留n位小数,返回的是字符串

num.toExponential(n):转换为指数计数法,保留n位小数,返回的是字符串

num.toPrecision(n):把数字格式化为指定的长度,保留n位数。有可能指数化

        let a = 123456.789
        a.toFixed(2)          //123456.79
        a.toExponential(2) //1.23e+5
        a.toPrecision(2)     //1.2e+5

二进制、八进制、十六进制

二进制前缀0B或0b,八进制前缀0o或者0O,十六进制前缀0x

0b111110111 === 503 // true
0o767 === 503 // true

其他进制转十进制

let b = '0xB'
Number.parseInt(b,16) //11 

Number.MAX_VALUE:js 中可表示的最大的数。它的近似值为 1.7976931348623157 x 10308

Number.MIN_VALUE:js 中可表示的最小的数。它的近似值为 5 x 10-324

Number.NaN,Number.isNaN(),isNaN()

Number.NaN代表非数字值的特殊值。该属性用于指示某个值不是数字。也可以直接用NaN

Number.isNaN()是es6新增,检查一个值是否为NaN。如果参数类型不是NaN,Number.isNaN()一律返回false

isNaN()是es5的,检查一个值是否为NaN,会先把非数值转换成数值,建议不使用

Number.isFinite(),isFinite()

检查一个数值是否为有限的(finite),即不是Infinity。如果参数类型不是数值,Number.isFinite一律返回false

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

isFinite()是es5的,检查一个值是否为NaN,会先把非数值转换成数值,建议不使用

Number.isInterger()

Number.isInteger()用来判断一个数值是否为整数。参数不是数值,返回false。

Number.isInteger(25) // true
Number.isInteger(25.0) // true
Number.isInteger(25.1) // false

JavaScript 内部,整数和浮点数采用的是同样的储存方法,所以 25 和 25.0 被视为同一个值。数值精度超过限度会误判

Number.EPSILON

极小的常量,表示 1 与大于 1 的最小浮点数之间的差,是 JavaScript 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。实质是一个可以接受的最小误差范围

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

 安全整数,Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER,Number.isSafeInteger()

JavaScript 能够准确表示的整数范围在-2^532^53之间(不含两个端点),超过这个范围,无法精确表示这个值。

Math.pow(2, 53) // 9007199254740992

9007199254740992  // 9007199254740992
9007199254740993  // 9007199254740992

Math.pow(2, 53) === Math.pow(2, 53) + 1
// true

Number.MAX_SAFE_INTEGER,Number.MIN_SAFE_INTEGER来表示这个范围的上下限。

Number.MAX_SAFE_INTEGER === Math.pow(2, 53) - 1 === 9007199254740991
Number.MIN_SAFE_INTEGER === -Number.MAX_SAFE_INTEGER  === -9007199254740991 

Number.isSageInteger()则是用来判断一个整数是否落在这个范围之内。其实现如下

Number.isSafeInteger = function (n) {
  return (typeof n === 'number' &&
    Math.round(n) === n &&
    Number.MIN_SAFE_INTEGER <= n &&
    n <= Number.MAX_SAFE_INTEGER);
}

Number()方法

0b0o前缀的字符串数值转为十进制

Number('0b111')  // 7
Number('0o10')  // 8  

Number.parseInt(),Number.parseFloat() 

// ES5的写法
parseInt('12.34') // 12
parseFloat('123.45#') // 123.45

// ES6的写法
Number.parseInt('12.34') // 12
Number.parseFloat('123.45#') // 123.45

 parseInt()和parseFloat()都会有类型转换的步骤,建议不适用

 

Math

属性

属性描述
E 返回算术常量 e,即自然对数的底数(约等于2.718)。
LN2 返回 2 的自然对数(约等于0.693)。
LN10 返回 10 的自然对数(约等于2.302)。
LOG2E 返回以 2 为底的 e 的对数(约等于 1.414)。
LOG10E 返回以 10 为底的 e 的对数(约等于0.434)。
PI 返回圆周率(约等于3.14159)。
SQRT1_2 返回返回 2 的平方根的倒数(约等于 0.707)。
SQRT2 返回 2 的平方根(约等于 1.414)。

方法

方法描述
abs(x) 返回数的绝对值。
acos(x) 返回数的反余弦值。
asin(x) 返回数的反正弦值。
atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值。
atan2(y,x) 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。
ceil(x) 对数进行上舍入。
cos(x) 返回数的余弦。
exp(x) 返回 e 的指数。
floor(x) 对数进行下舍入。
log(x) 返回数的自然对数(底为e)。
max(x,y) 返回 x 和 y 中的最高值。
min(x,y) 返回 x 和 y 中的最低值。
pow(x,y) 返回 x 的 y 次幂。
random() 返回 0 ~ 1 之间的随机数。
round(x) 把数四舍五入为最接近的整数。
sin(x) 返回数的正弦。
sqrt(x) 返回数的平方根。
tan(x) 返回角的正切。
toSource() 返回该对象的源代码。
valueOf() 返回 Math 对象的原始值。

Math.trunc()

去除一个数的小数部分,返回整数部分,内部使用Number方法将其先转为数值。

Math.trunc(4.1) // 4
Math.trunc('123.456') // 123
Math.trunc(true) //1
Math.trunc(false) // 0
Math.trunc(null) // 0

对于空值和无法截取整数的值,返回NaN

Math.trunc(NaN);      // NaN
Math.trunc('foo');    // NaN
Math.trunc();         // NaN
Math.trunc(undefined) // NaN

对于没有部署这个方法的环境,可以用下面的代码模拟。

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

Math.sign()

用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。

  • 参数为正数,返回+1
  • 参数为负数,返回-1
  • 参数为 0,返回0
  • 参数为-0,返回-0;
  • 其他值,返回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;
}; 

Math.cbrt()

计算一个数的立方根。方法内部也是先使用Number方法将其转为数值。

对于没有部署这个方法的环境,可以用下面的代码模拟。

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

Math.hypot()

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方法会将其转为数值。只要有一个参数无法转为数值,就会返回 NaN。 

 

其他数学相关的方法如对数方法、指数方法、双曲线方法参考文档http://es6.ruanyifeng.com/#docs/number

posted @ 2019-12-23 23:48  把我当做一棵树叭  阅读(538)  评论(0)    收藏  举报