ES6快速入门第六章------数值的扩展(可私信解惑)
-
二进制和八进制表示法
ES6提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示,第一个字符是数字零。
// 十进制456转换为二进制111001000 ,二进制使用0b开头
0b111001000 === 456 // true
// 十进制456转换为二进制710,八进制使用0o开头
0o710 === 456 // true
如果要将0b和0o前缀的字符串数值转为十进制,要使用Number方法。
Number('0b110') // 6 二进制
Number('0o11') // 9 八进制
-
Number对象(1)
ES6在Number对象上,新提供了Number.isFinite()和Number.isNaN()两个方法。
这两个新方法只对数值有效,非数值一律返回false。
Number.isFinite()
用来检查一个数值是否为有限的(finite)。有限返回值为true,不是有限的返回false。
Number.isFinite(0.545877); // true
Number.isFinite('aaaa'); // false 非数值返回false
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false Infinity 属性用于存放表示正无穷大的数值。
Number.isNaN()
用来检查一个值是否为NaN。是NaN返回值为true,不是NaN返回值为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.isInteger()
用来判断一个值是否为整数。需要注意的是,在JavaScript内部,整数和浮点数是同样的储存方法,所以3和3.0被视为同一个值。
Number.isInteger(10) // true
Number.isInteger(10.0) // true
Number.isInteger(10.1) // false
Number.isInteger("10") // false
Number.isInteger(true) // false
-
Number对象(2)
Number.parseInt(), Number.parseFloat()方法
ES6将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变。
parseInt()函数可解析一个字符串,并返回一个整数。parseFloat() 函数可解析一个字符串,并返回一个浮点数。
// ES5的写法
parseInt('12.34') // 12
parseFloat('12.34#') // 12.34
// ES6的写法
Number.parseInt('12.34') // 12
Number.parseFloat('12.34abcd这里是字符串') // 12.34
Number.EPSILON 常量
浮点数计算是不精确的。
console.log(0.1+0.2) // 0.30000000000000004
ES6在Number对象上面,新增一个极小的常量Number.EPSILON,作为一个误差范围。
当这个误差能够小于Number.EPSILON,我们就可以认为得到了正确结果。
var num=0.1+0.2-0.3 // 5.551115123125783e-17
num< Number.EPSILON // true 表示小于误差范围
Number.isSafeInteger() 安全整数
JavaScript能够准确表示的整数范围在-2^53到2^53之间(不含两个端点),超过这个范围,无法精确表示这个值。
var num=Math.pow(2, 53) // 9007199254740992
var num2=num+1 // num2超过 -2^53到2^53这个范围,打印出来和num值相等,这是错误的
num==num2 // true
上面代码中,超出2的53次方之后,一个数就不精确了。num和num2本来应该是不相等,但是返回值是相等。
Number.isSafeInteger()则是用来判断一个整数是否落在这个范围之内。
//接上面代码
Number.isSafeInteger(num2) // false
-
Math对象的扩展(1)
ES6在Math对象上新增了17个与数学相关的方法。所有这些方法都是静态方法,只能在Math对象上调用。下面列出常见方法。
Math.trunc方法用于去除一个数的小数部分,返回整数部分。
Math.trunc(4.1) // 4
Math.trunc('123.456') //123 对于非数值,Math.trunc内部使用Number方法将其先转为数值
Math.trunc(NaN); // NaN 对于空值和无法截取整数的值,返回NaN
Math.sign方法用来判断一个数到底是正数、负数还是零。
它会返回五种值:
- 参数为正数,返回+1;
- 参数为负数,返回-1;
- 参数为0,返回0;
- 参数为-0,返回-0;
- 其他值,返回NaN。
Math.cbrt方法用于计算一个数的立方根。
Math.cbrt('8') // 2 2的三次方为8
-
Math对象的扩展(2)
ES6新增了4个对数相关方法。
Math.expm1(x)返回ex - 1,即Math.exp(x) - 1。
Math.expm1(-1) // -0.6321205588285577
Math.expm1(0) // 0
Math.expm1(1) // 1.718281828459045
Math.log1p(x)方法返回1 + x的自然对数,即Math.log(1 + x)。如果x小于-1,返回NaN。
Math.log1p(1) // 0.6931471805599453
Math.log1p(0) // 0
Math.log1p(-1) // -Infinity
Math.log1p(-2) // NaN
Math.log10(x)返回以10为底的x的对数。如果x小于0,则返回NaN。
Math.log10(2) // 0.3010299956639812
Math.log10(1) // 0
Math.log10(0) // -Infinity Infinity表示正无穷大的数值
Math.log10(-2) // NaN
Math.log2(x)返回以2为底的x的对数。如果x小于0,则返回NaN。
Math.log2(2) // 1
Math.log2(1) // 0
Math.log2(0) // -Infinity
Math.log2(-2) // NaN
Math.log2(1024) // 10
-
Math对象的扩展(3)
ES6新增了6个三角函数方法:
- Math.sinh(x) 返回x的双曲正弦
- Math.cosh(x) 返回x的双曲余弦
- Math.tanh(x) 返回x的双曲正切
- Math.asinh(x) 返回x的反双曲正弦
- Math.acosh(x) 返回x的反双曲余弦
- Math.atanh(x) 返回x的反双曲正切