5.1 Number.isFinite(), Number.isNaN()
Number.isFinite() 用于检查一个数值是否是有限的,即不是Infinity,若参数不是Number类型,则一律返回false 。
Number.isFinite(10); // trueNumber.isFinite(0.5); // trueNumber.isFinite(NaN); // falseNumber.isFinite(Infinity); // falseNumber.isFinite(-Infinity); // falseNumber.isFinite('leo'); // falseNumber.isFinite('15'); // falseNumber.isFinite(true); // falseNumber.isFinite(Math.random()); // trueNumber.isNaN()用于检查是否是NaN,若参数不是NaN,则一律返回false。
Number.isNaN(NaN); // trueNumber.isNaN(10); // falseNumber.isNaN('10'); // falseNumber.isNaN(true); // falseNumber.isNaN(5/NaN); // trueNumber.isNaN('true' / 0); // trueNumber.isNaN('true' / 'true'); // true区别:
与传统全局的isFinite()和isNaN()方法的区别,传统的这两个方法,是先将参数转换成数值,再判断。
而ES6新增的这两个方法则只对数值有效, Number.isFinite()对于非数值一律返回false,Number.isNaN()只有对于NaN才返回true,其他一律返回false。
isFinite(25); // trueisFinite("25"); // trueNumber.isFinite(25); // trueNumber.isFinite("25"); // falseisNaN(NaN); // trueisNaN("NaN"); // trueNumber.isNaN(NaN); // trueNumber.isNaN("NaN"); // false5.2 Number.parseInt(), Number.parseFloat()
这两个方法与全局方法parseInt()和parseFloat()一致,目的是逐步减少全局性的方法,让语言更模块化。
parseInt('12.34'); // 12parseFloat('123.45#'); // 123.45Number.parseInt('12.34'); // 12Number.parseFloat('123.45#'); // 123.45Number.parseInt === parseInt; // trueNumber.parseFloat === parseFloat; // true5.3 Number.isInteger()
用来判断一个数值是否是整数,若参数不是数值,则返回false。
Number.isInteger(10); // trueNumber.isInteger(10.0); // trueNumber.isInteger(10.1); // false5.4 Math对象的拓展
ES6新增17个数学相关的静态方法,只能在Math对象上调用。
- Math.trunc:
- 用来去除小数的小数部分,返回整数部分。
- 若参数为非数值,则先转为数值。
- 若参数为空值或无法截取整数的值,则返回NaN。
ES5实现:
Math.trunc = Math.trunc || function(x){ return x < 0 ? Math.ceil(x) : Math.floor(x);}- Math.sign():
- 判断一个数是正数、负数还是零,对于非数值,会先转成数值。
- 返回值:
- 参数为正数, 返回 +1
- 参数为负数, 返回 -1
- 参数为0, 返回 0
- 参数为-0, 返回 -0
- 参数为其他值, 返回 NaN
ES5实现
Math.sign = Math.sign || function (x){ x = +x; if (x === 0 || isNaN(x)){ return x; } return x > 0 ? 1: -1;}- Math.cbrt():
- 用来计算一个数的立方根,若参数为非数值则先转成数值。
ES5实现
Math.cbrt = Math.cbrt || function (x){ var a = Math.pow(Math.abs(x), 1/3); return x < 0 ? -y : y;}- Math.clz32():
- 用于返回一个数的 32 位无符号整数形式有多少个前导 0。
- Math.imul():
- 用于返回两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数。
- Math.fround():
- 用来返回一个数的2位单精度浮点数形式。
- Math.hypot():
- 用来返回所有参数的平方和的平方根。
- Math.expm1():
- 用来返回ex - 1,即Math.exp(x) - 1。
ES5实现
Math.expm1 = Math.expm1 || function(x) { return Math.exp(x) - 1;};- Math.log1p():
- 用来返回1 + x的自然对数,即Math.log(1 + x)。如果x小于-1,返回NaN。
ES5实现
Math.log1p = Math.log1p || function(x) { return Math.log(1 + x);};- Math.log10():
- 用来返回以 10为底的x的对数。如果x小于 0,则返回 NaN。
ES5实现
Math.log10 = Math.log10 || function(x) { return Math.log(x) / Math.LN10;};- Math.log2():
- 用来返回以 2 为底的x的对数。如果x小于0,则返回 NaN。
ES5实现
Math.log2 = Math.log2 || function(x) { return Math.log(x) / Math.LN2;};- 双曲函数方法:
- 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)
5.5 指数运算符
新增的指数运算符(**):
2 ** 2; // 42 ** 3; // 8 2 ** 3 ** 2; // 相当于 2 ** (3 ** 2); 返回 512指数运算符(**)与Math.pow的实现不相同,对于特别大的运算结果,两者会有细微的差异。
Math.pow(99, 99)// 3.697296376497263e+19799 ** 99// 3.697296376497268e+197公众号:前端自习课
文章版权声明:除非注明,否则均为公交号原创文章,转载或复制请以超链接形式并注明出处。