ES6学习总结之数值的扩展
1. 二进制和八进制
0b
开头的数值表示二进制数;
0o
开头的数值表示八进制数;
可以用Number()
将二进制或八进制表示的字符串转换为十进制的数。如
Number('0b111') // 7
Number('0o10') // 8
2. Number.isFinite()和Number.isNaN()
Number.isFinite()
用于判断某个数是否有限,对于一切非数值类型的参数,返回false;
Number.isNaN()
用于判断某个数是否非数,只对非数返回true。
这两个方法与实例方法isFinite()
和isNaN()
的区别是:
实例上的方法会先用Number()
将实例转化成数值类型,然后判断有限还是非数;而这两个方法只对数值类型有用。
3. Number.parseInt()和Number.parseFloat()
这两种方法和实例上的parseInt
和parseFloat()
完全一样。
4. Number.isInteger()
判断一个数是否为整数,也是只对数值类型有效,对于其他数值类型,返回false。
注意:若超过JS的精度范围,可能会误判。如:
Number.isInteger(3.0000000000000002) // true
5. Number.EPSILON
表示1与大于1的最小浮点数之间的差,是一个极小的常量,常用于设置能够接受的误差范围。
6. 安全整数和Number.isSafeInteger()
最大整数:Number.MAX_SAFE_INTEGER
最小整数:Number.MIN_SAFE_INTEGER
7. Math对象的扩展
Math.trunc()
去除一个数的小数部分,返回整数部分。对于非数先用Number()
转换。Math.sign()
判断一个数是正数(+1)、负数(-1)还是0(+0、-0),非数先用Number()
转换。Math.cbrt()
计算一个数的立方根,对于非数同上。Math.clz32()
将参数转为 32 位无符号整数的形式,然后返回这个 32 位值里面有多少个前导 0。Math.imul()
返回两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数。Math.found()
返回一个数的32位单精度浮点数形式。Math.hypot()
返回所有参数的平方和的平方根。
8. 指数运算符
ES2016 新增了一个指数运算符(**
)。
2 ** 2 // 4
2 ** 3 // 8
9. BigInt数据类型
ES2020引入一种新的数据类型BigInt
(大整数),用于表示超出JS精度范围的整数,没有位数的限制,任何位数的整数都可以精确表示。
注意:
BigInt 类型的数据必须添加后缀n
。
比如:
1234 // 普通整数
1234n // BigInt
// BigInt 的运算
1n + 2n // 3n
BigInt 同样可以使用各种进制表示,都要加上后缀n
。
比如:
0b1101n // 二进制
0o777n // 八进制
0xFFn // 十六进制
BigInt和数值是两个数据类型,不全等。
比如:
42n === 42 // false
BigInt对象
BigInt
构造函数可以生成BigInt
数据类型的值,和Number()
用法一样。但是,BigInt()
一定要有参数,并且参数必须可以转为数值。
BigInt(123) // 123n
BigInt('123') // 123n
BigInt(false) // 0n
BigInt(true) // 1n
new BigInt() // TypeError
BigInt(undefined) //TypeError
BigInt(null) // TypeError
BigInt('123n') // SyntaxError
BigInt('abc') // SyntaxError
BigInt
对象继承了Object对象的两个方法:
BigInt.prototype.toString()
BigInt.prototype.valueOf()
继承了Number对象的一个方法:
BigInt.prototype.toLocaleString()
还提供三个静态方法:
BigInt.asUintN(width, BigInt)
: 给定的 BigInt 转为 0 到 2width - 1 之间对应的值。BigInt.asIntN(width, BigInt)
:给定的 BigInt 转为 -2width - 1 到 2width - 1 - 1 之间对应的值。BigInt.parseInt(string[, radix])
:近似于Number.parseInt(),将一个字符串转换成指定进制的 BigInt。
转换规则
可以使用Boolean()、Number()和String()这三个方法,将 BigInt 可以转为布尔值、数值和字符串类型。
Boolean(0n) // false
Boolean(1n) // true
Number(1n) // 1
String(1n) // "1"
内容参考:ES6——数值的扩展 作者:阮一峰