【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^53到2^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()方法
将0b和0o前缀的字符串数值转为十进制
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
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号