二进制和八进制表示法
ES6 提供了二进制和八进制的新写法
- 二进制用前缀
0b(或0B) - 八进制用前缀
0o(或0O)
Number.isFinite()、Number.isNaN()
Number.isFinite()用来检查一个数值是否是有限的Number.isNaN()用来检查一个值是否是 NaN
和传统的全局方法 isFinite() 和 isNaN() 不同
- 传统方法先调用
Number()将非数值转为数值,再进行判断 - 新方法只对数值生效,对于非数值一律方为 false
isFinite(25) // true
isFinite('25') // true
Number.isFinite(25) // true
Number.isFinite('25') // false
isNaN(NaN) // true
isNaN('NaN') // true
Number.isNaN(NaN) // true
Number.isNaN('NaN') // false
Number.isNaN(1) // false
Number.parseInt()、Number.parseFloat()
ES6 将全局方法 parseInt() 和 parseFloat() 移植到了 Number 对象上,行为完全保持不变
Number.isInteger()
Number.isInteger() 用来判断一个值是否为整数
Number.EPSILON
ES6 在 Number 对象上新增了一个极小的常量 Number.EPSILON
Number.EPSILON // 2.220446049250313e-16
Number.EPSILON.toFixed(20) // '0.00000000000000022204'
引入一个这么小的量,目的在于为浮点数计算设置一个误差值
0.1 + 0.2 // 0.30000000000000004
Number.EPSILON 的实质是一个可以接受的误差范围
安全整数和 Number.isSafeInteger()
JavaScript 能够准确表示的整数范围在 -2^53 到 2^53 之间(不含两个断点),超出这个范围就无法精确表示
ES6 引入 Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER 两个常量,用来表示这个范围的上下限
Number.MAX_SAFE_INTEGER === Math.pow(2, 53) - 1 // true
Number.MIN_SAFE_INTEGER === -1 * Math.pow(2, 53) + 1 // true
Number.isSafeInteger() 用来判断一个整数是否落在这个范围内
Number.isSafeInteger('a') // false
Number.isSafeInteger(3) // true
Number.isSafeInteger(1.2) // false
Number.isSafeInteger('1') // false
Math 对象的扩展
-
Math.trunc():用于去除一个数的小数部分,返回整数部分
- 对于非数值,会先将其转化为数值
- 对于控制和无法截取整数的值,返回 NaN
-
Math.sign():用来判断一个数到底是正数、负数还是零
- 对于非数值,会先将其转化为数值
- 正数,返回 1
- 负数,返回 -1
- 0,返回 0
- -0,返回 -0
- 其它,返回 NaN
-
Math.cbrt():用来计算一个数的立方根
- 对于非数值,会先将其转化为数值
-
Math.clz32():返回一个数的 32 位无符号整数形式有多少个前导0
- 对于小数,只考虑整数部分
- 对于控制和其它类型的值,会先将其转化为数值
-
Math.imul():返回两个数以 32 为带符号整数形式相乘的结果,返回也是一个 32 位带符号整数
-
Math.fround():返回一个数的单精度浮点数形式
- 对于整数,返回结果不会有任何不同
- 对于无法用 64 个二进制位精确表示的小数,会返回最接近这个小数的单精度浮点数
-
Math.hypot():返回所有参数的平方和的平方根
- 参数不是数值,会先将其转化为数值
- 只要有一个参数无法转化为数值,就会返回 NaN
-
Math.expm1()
Math.expm1(x)返回e^x - 1,即Math.exp(x) - 1
-
Math.log1p()
Math.log1p(x)返回ln(1+n)即Math.log(1+x)- 如果 x 小于 -1 ,则返回 NaN
-
Math.log10()
Math.log10(x)返回以 10 为底的 x 的对数- 如果 x 小于 0 ,则返回 NaN
-
Math.log2()
Math.log2(x)返回以 2 为底的 x 的对数- 如果 x 小于 0 ,则返回 NaN
-
Math.sinh(x):返回 x 的双曲正弦
-
Math.cosh(x):返回 x 的双曲余弦
-
Math.tanh(x):返回 x 的双曲正切
-
Math.asinh(x):返回 x 的反双曲正弦
-
Math.acosh(x):返回 x 的反双曲余弦
-
Math.atanh(x):返回 x 的反双曲正切
-
Math.signbit()
Math.sign()用来判断一个值的正负- 在判断符号位的正负时,
Math.sign()不是很有用 Math.signbit()用来判断一个数的符号位是否已经设置
Integer 数据类型
Integer 类型的数据只能用来表示整数,没有位数限制,任何位数的整数都可以精确表示
Integer 类型的数据必须使用后缀 n 来表述
1n + 2n // 3n
Integer 类型的数据, typeof 运算符将返回 integer
JavaScript 提供了 Integer 对象,用来生成 Integer 类型的数值,转换规则基本和 Number 一致
Integer 运算方面,+ 、-、* 和 Number 类型一致,除法会舍去小数部分,返回一个整数
不带符号的右移位运算符 >>> 和 一元的求正运算符 +,这两种在使用时会报错
>>>要求最高位补0,但 Integer 没有最高位,导致这个运算符无意义+返回 Number 类型
Integer 类型不能和 Number 类型进行混合运算,因为无论返回的是 Integer 还是 Number ,都会丢失信息
相等运算符(==)会改变数据类型,也是不允许混合使用的
精确相等运算符(===)不会改变数据类型,可以混合使用