es6之数值的扩展
1.二进制和八进制
es6提供前缀表示二进制和八进制
0b111110111 === 503 //true 二进制前面加上0b
0o767 === 503 // 八进制
Number('0o767') // 转化为十进制
2.Number.isFinite()和Number.isNaN()方法
Number.isFinite()检查一个数值是否是有限的
console.log(Number.isFinite(123)) // true
console.log(Number.isFinite('123')) // false
console.log(Number.isFinite(Infinity)) // false
事实证明,除了数字之外的一切变量返回值都是false,包括字符串,true,false…
同时,如果要基于es5,则是通过typeof判断类型是否是Number和wndow.isFinite()
Number.isNaN()一个数值是否是NaN
console.log(Number.isNaN(NaN)) // true
console.log(Number.isNaN(true)) // false
console.log(Number.isNaN("123")) // false
console.log(Number.isNaN(123)) // false
如果要基于es5,则是通过typeof判断类型是否是Number和wndow.isNaN()
3.Number.parseInt(),Number.parseFloat()方法
es6将parseInt()和parseFloat()移植到了Number下面,使语言更加模块化
console.log(parseInt('12.34')) // 12
console.log(parseFloat('12.345#')) // 12.345
console.log(Number.parseInt('12.34')) // 12
console.log(Number.parseFloat('12.345#')) // 12.345
4.Number.isInteger()方法
用于判断一个变量是否是整数,在JavaScript整数和浮点数以同样的方法存储,所以3和3.0是同一个值
console.log(Number.isInteger(10)) // true
console.log(Number.isInteger(10.0)) // true
console.log(Number.isInteger('10.1213')) // false
console.log(Number.isInteger(true)) // false
5.Number.EPSILON
在Number中引入的一个极小微量,总所周知,JavaScript中浮点小数运算是不准确的,用于检测误差
通常我们认为,误差值小于Number.EPSILON,我们则认为得到了正确结果.
console.log(Number.EPSILON) // 2.220446049250313e-16
console.log(Number.EPSILON.toFixed(20)) // 0.00000000000000022204 取小数点后20位
console.log(0.1 + 0.2) // 0.30000000000000004 浮点运算是不准确的
(0.1 + 0.2 - 0.3)<Number.EPSILON 判断是true还是false
6.安全整数和Number.isSafeInteger()
总所周知,javascript的整数范围是2的53次方到-2的53次方,超出范围就就不精准了
console.log(Math.pow(2, 53) === (Math.pow(2, 53) + 1)) // true
ES6 提供了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER来表示数值的上限和下限
同时,提供isSafeInteger方法,用于检测是否在这个范围
console.log(Number.isSafeInteger(111)) // true
console.log(Number.isSafeInteger('aaa')) // false
console.log(Number.isSafeInteger(Math.pow(2, 53) + 1)) // false
但是isSafeInteger这个方法是又有局限性的,如果传入的是一个表达式,并且,表达式中的值不是安全整数,会出现问题,因为,当我们用isSafeInteger这个方法时,应该验证每一个值
7.math 对象的扩展
Math.trunc()方法用于去除一个数的小数部分,如果非数值,则先转化为数值
console.log(Math.trunc(3.5)) // 3
Math.sign()判断一个数是整数,负数,还是0,返回值是1,-1,0,-0,NaN
console.log(Math.sign(3)) // 1
console.log(Math.sign(-3)) // -1
Math.cbrt() 用于计算一个数的立方根
console.log(Math.cbrt(8)) // 2
除此之外,还有平方根计算,对数,双曲函数等等,不介绍了
8.指数运算法
和Math.pow(2,2)方法有些类似
2**2 // 4
2**3 // 8