1.二进制和八进制表示法
ES6 分别用 0b(0B) 和 0o(0O)表示二进制和八进制
使用Number方法,将二、八进制转换为十进制
Number('0b111') // 7
Number('0o10') // 8
2. Number.isFinite 和 Number.isNaN
isFinite 用来检查一个数值是否有限
isNaN 判断一个值是否 NaN
区别:这两种方法在 ES6 中只对数值有效,除了对 isNaN()对 NaN返回 true, 其他的均返回false;
3.Number.parseInt 和 Number.parseFloat
// ES5的写法
parseInt('12.34') // 12
parseFloat('123.45#') // 123.45
// ES6的写法
Number.parseInt('12.34') //12
Number.parseFloat('123.45#') // 123.45
4.Number.isInteger 判断一个数值是否为整数
5.Number.EPSILON
Number.EPSILON实际上是 JavaScript 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。
Number.EPSILON可以用来设置“能够接受的误差范围”
6.安全整数 Number.isSafeInteger()
JavaScript 能够准确表示的整数范围在-2^53到2^53之间(不含两个端点),超过这个范围,无法精确表示这个值。
ES6 引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER这两个常量,用来表示这个范围的上下限。
7. Math 对象的拓展
ES6 新增了17个静态方法,只能在Math 对象上调用
7.1 Math.trunc() 去掉小数部分
对于非数值,Math.trunc内部使用Number方法将其先转为数值。
对于空值和无法截取整数的值,返回NaN。
7.2 Math.sign() 判断正负数,对于一个非数值,会将其先转换为数值,返回五种值
参数为正数,返回+1;
参数为负数,返回-1;
参数为 0,返回0;
参数为-0,返回-0;
其他值,返回NaN。
对于无法转换为数值的值,就返回 NaN
7.3 Math.cbrt() 求立方根
7.5 Math.clz32() 32位二进制形式表示
Math.clz32(0) // 32 Math.clz32(1) // 31 Math.clz32(1000) // 22 Math.clz32(0b01000000000000000000000000000000) // 1 Math.clz32(0b00100000000000000000000000000000) // 2
clz32这个函数名就来自”count leading zero bits in 32-bit binary representation of a number“(计算一个数的 32 位二进制形式的前导 0 的个数)的缩写。
对于小数,只计算整数部分
7.6 Math.imul() Math.imul方法返回两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数。
7.7 Math.fround() 返回一个数的32位 单精度浮点数形式
7.8 Math.hypot() 返回所有参数的平方和的平方根;
7.9 对数相关
Math.expm1()
Math.expm1(x)返回 ex - 1,即Math.exp(x) - 1。
Math.log1p()
Math.log1p(x)方法返回1 + x的自然对数,即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。
7.10 双曲函数方法
ES6 新增了 6 个双曲函数方法。
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)
7。11 Math.signbit()
Math.sign()用来判断一个值的正负,但是如果参数是-0,它会返回-0。
如果参数是NaN,返回false
如果参数是-0,返回true
如果参数是负值,返回true
其他情况返回false
8.指数运算符(**)
2 ** 2 // 4
2 ** 3 // 8
let a = 1.5;
a **= 2; // 等同于 a = a * a;
let b = 4;
b **= 3; // 等同于 b = b * b * b;
9.Integer 数据类型
9.1
JavaScript 所有数字都保存成 64 位浮点数,这决定了整数的精确程度只能到 53 个二进制位。大于这个范围的整数,JavaScript 是无法精确表示的,这使得 JavaScript 不适合进行科学和金融方面的精确计算。
现在有一个提案,引入了新的数据类型 Integer(整数),来解决这个问题。整数类型的数据只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。
9.2
为了与 Number 类型区别,Integer 类型的数据必须使用后缀 n 表示。
9.3
JavaScript 原生提供Integer对象,用来生成 Integer 类型的数值。转换规则基本与Number()一致。
9.4
在数学运算方面,Integer 类型的+、-、*和**这四个二元运算符,与 Number 类型的行为一致。除法运算/会舍去小数部分,返回一个整数。
9.5
Integer 类型不能与 Number 类型进行混合运算。
9.6
相等运算符(==)会改变数据类型,也是不允许混合使用。
精确相等运算符(===)不会改变数据类型,因此可以混合使用。