二进制和八进制表示法
- ES6中提供了二进制和八进制的新写法,二进制以0b开头,八进制以0o开头
0b111110111 === 503 // true
0o767 === 503 // true
Number('0b111') // 7
Number('0o10') // 8
Number.isFinite(), Number.isNaN()
- 这两个方法作为ES6新增的,前者用于验证数字是否有限,后者用于验证变量是否为NaN,且验证时都不进行强制类型转换。
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
Number.isNaN(NaN) // true
Number.isNaN(15) // false
Number.isNaN('15') // false
Number.isNaN(true) // false
Number.isNaN(9/NaN) // true
Number.isNaN('true'/0) // true
Number.isNaN('true'/'true') // true
Number.parseInt(), Number.parseFloat()
- 这两个方法由全局对象移植到Number对象上,行为完全不变,只是为了逐步实现语言模块化
Number.isInteger()
Number.EPSILON
- 表示一个大于1的数与1做差的极小数约为2^-52
- 由于浮点数无法进行精确运算,所以该数可用于浮点数运算作比较。
安全整数和 Number.isSafeInteger() ;
- 安全整数指整数的范围在253~253之间的数(不包括端点)
- 这个函数是用来验证一个变量是否为安全整数
Math对象的扩展
Math.trunc();
Math.trunc(4.1) // 4
Math.trunc(4.9) // 4
Math.trunc(-4.1) // -4
Math.trunc(-4.9) // -4
Math.trunc(-0.1234) // -0
Math.sign()
- 用于判断数值符号
- 参数为正数,返回+1;
- 参数为负数,返回-1;
- 参数为0,返回0;
- 参数为-0,返回-0;
- 其他值,返回NaN。
Math.sign(-5) // -1
Math.sign(5) // +1
Math.sign(0) // +0
Math.sign(-0) // -0
Math.sign(NaN) // NaN
Math.cbrt()
Math.cbrt(-1) // -1
Math.cbrt(0) // 0
Math.cbrt(1) // 1
Math.cbrt(2) // 1.2599210498948734
Math.clz32()
- 在JS中,整数以32为二进制表示,该函数返回数字的前导0的个数;
- 对于小数只考虑整数部分;
- 对于非整数,会先进行强制类型转换
Math.imul()
- 在JS中,当两数之积超过2^53的时候,在低数位会发生不准确的现象,因此出现了该函数,该函数用于返回俩数的积,在运算较小数时,与运算符*并无异同。
Math.fround()
- 返回一个数的单精度浮点数的值,对于整数返回结果与原数相同,区别主要是那些无法用64个二进制位精确表示的小数。这时,Math.fround方法会返回最接近这个小数的单精度浮点数。
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(3, 4, '5'); // 7.0710678118654755
Math.hypot(-3); // 3
对数方法
Math.expm1()
Math.log1p()
- Math.log1p(x)返回1+x的自然对数,若想x<-1,则返回NaN
Math.log10()
Math.log2()
双曲函数方法
- ES6新增了6个函数
- Math.sinh(x) 返回x的双曲正弦(hyperbolic sine)
- Math.cosh(x) 返回x的双曲余弦(hyperbolic cosine)
- Math.tanh(x) 返回x的双曲正切(hyperbolic tangent)
- Math.asinh(x) 返回x的反双曲正弦(inverse hyperbolic sine)
- Math.acosh(x) 返回x的反双曲余弦(inverse hyperbolic cosine)
- Math.atanh(x) 返回x的反双曲正切(inverse hyperbolic tangent)
- 高中数学差,都不懂……
指数运算符
let a = 1.5;
a **= 2;
// 等同于 a = a * a;
let b = 4;
b **= 3;
// 等同于 b = b * b * b;
- 注意,在 V8 引擎中,指数运算符与Math.pow的实现不相同,对于特别大的运算结果,两者会有细微的差异。