数值的扩展
二进制、八进制、十六进制数值的表示
1 2 3
| var a = 0b10; var b = Number('0b11'); // 将字符串转换为十进制数值 console.log(a, b); // 2 3
|
1 2 3
| var a = 0o10; var b = Number('0o11'); console.log(a, b);
|
检测特殊值 —— Infinite、Nan
Es6 在 Number 对象上新提供了 Number.isFinite()
、Number.isNaN()
两个方法检查 Infinite、Nan 两个特殊值。
Number.isFinite()
:检查一个数值是否非无穷(infinity)。
1 2
| Number.isFinite(1); Number.isFinite(Infinity)
|
转换类型函数被转移
ES5 的全局方法 parseInt()
, parseFloat()
被转移到 Number 对象上
1 2 3 4 5 6 7
| parseInt('1.11'); parseFloat('123.45'); Number.parseInt('1.11'); Number.parseFloat('123.45');
|
判断值是否为整数
JavaScript 中,整数和浮点数采用同样的存储方法,所以检测小数也会返回 true
。
1 2
| Number.isInteger('1.1'); Number.isInteger(1.1)
|
极小常量
极小常量(Number.EPSILON):是为在浮点数计算时设置一个误差范围,当小于这个范围可以认为结果正确,误差在可接受范围。
1 2
| 0.1 + 0.2 0.1 + 0.2 -0.3 < Number.EPSILON
|
安全整数
安全整数范围的上下限:Number.MAX_SAFE_INTEGER
、Number.MIN_SAFE_INTEGER
。JavaScript 可以正确表示的整数范围为:(-2^53 ~ 2^53)。超过后无法精确表示
1 2 3 4
| Math.pow(2, 53) === Math.pow(2, 53) + 2 Number.MAX_SAFE_INTEGER === Math.pow(2, 53) Number.MIN_SAFE_INTEGER === Math.pow(-2, 53)
|
Number.isSafeInteger()
方法可以判断一个整数是否落在这个范围中。
1 2 3 4 5 6 7 8
| Number.isSafeInteger('abc') Number.isSafeInteger(null) Number.isSafeInteger(NaN) Number.isSafeInteger(Infinity) Number.isSafeInteger(-Infinity) Number.isSafeInteger(3) Number.isSafeInteger(Number.MIN_SAFE_INTEGER)
|
Math 对象的扩展
ES6 在Math
对象上新增了17个与数学相关的静态方法,只能在对象上调用。
- Math.trunc() : 去除一个数的小数部分,返回整数部分(对于非数值先转为数值)
1 2 3 4
| Math.trunc('123.456') Math.trunc(3.1) Math.trunc(3.9) Math.trunc(-0.1234)
|
- Math.sign() :判断一个数是正数还是负数还是零
1 2 3
| Math.sign(5) Math.sign(-5) Math.sing(0)
|
1 2 3
| Math.imul(2, 4) (0x7ffffff * 0x7ffffff) | 0 Math.imul(0x7ffffff, 0x7ffffff)
|
- Math.fround() : 返回一个数的单精度浮点数形式(对于无法用64位二进制精确表示的小数可以得到最接近这个小数的单精度浮点数)
- Math.hypot() : 返回所有参数的平方和的平方根
1 2 3
| Math.hypot(3, 4); Math.hypot(NaN); Math.hypot(-3)
|
- 对数方法:
Math.expm1()
, Math.log1p()
, Math.log10()
, Math.log2()
1 2 3
| Math.expm1 Math.log1p Math.log10
|
1 2 3 4 5 6
| Math.sinh(x) Math.cosh(x) Math.tanh(x) Math.asinh(x) Math.aconh(x) Math.atanh(x)
|
指数运算符
1 2 3 4
| 2 ** 2 2 ** 3 let a = 2; a **= 3
|