笔记,完全摘录自阮一峰
1.
扩展Number内置对象上的方法
- 扩展方法
原全局方法,现挂载到Number对象,避免给全局对象暴露过多接口
Number.isFinite()
,Number.isNaN()
Number.isFinite(num)
检测数值是否为无限
Number.isNaN(num)
检测参数是否为NaN
与全局方法的区别
全局方法的处理方法是,先对参数调用Number()
方法,转换为数值,再判断
新方法,Number.isFinite()
对于非数值一律返回false
,Number.isNaN()
只对于NaN
返回true
,非NaN
一律返回false
-
Number.parseInt()
,Number.parsefloat()
原方法移植到Number对象上。
Number.isInteger()
判断一个数,是否为整数。
由于JavaScript整数,浮点数统一的存储方法,所以3
和3.0
被视为同一个值。Number.EPSILON
新增的一个极小常量,由于浮点数计算精度问题,导致计算不准确。
当计算误差小于这个常量Number.EPSILON
时候吗,我们可以认为,得到了正确结果。Number.isSafeInterger()
JavaScript的安全数范围是-2^53
到2^53
(不含端点)。
ES6引入Number.MAX_SAFE_INTEGER
和Number.MIN_SAFE_INTEGER
来表示上下限。
Number.isSafeInterger()
来检测数值是否处于安全范围。
2.
Math对象的扩展
新增了17
个方法
Math.trunc()
取一个数的整数部分。
非数值,调用Number()
方法。
无法取值或空值,返回NaN
Math.sign()
来判断一个数到底是正数、负数、还是零。参数为正数,返回+1;
参数为负数,返回-1;
参数为0,返回0;
参数为-0,返回-0;
其他值,返回NaN。
Math.cbrt()
计算一个数的立方根
非数值调用Number()
Math.clz32()
JavaScript整数也用32位二进制表示,Math.clz32()
返回一个数的32位无符号整数形式有多少个前导0.
clz32
这个函数名就来自”count leading zero bits in 32-bit binary representations of a number“(计算32位整数的前导0)的缩写。
对于小数,该方法只考虑整数部分。
其他类型数,Math.clz32
会先将其转换数值。
Math.clz32() // 32
Math.clz32(NaN) // 32
Math.clz32(Infinity) // 32
Math.clz32(null) // 32
Math.clz32('foo') // 32
Math.clz32([]) // 32
Math.clz32({}) // 32
Math.clz32(true) // 31
-
Math.imul()
返回两个数以32位带符号整数形式相乘的结果,返回的也是一个32位的带符号整数。
用于解决过大数据(超过2的53次幂)相乘计算结果不正确的问题。
-
Math.fround()
返回一个数的单精度浮点数形式。
对于整数来说,Math.fround
方法返回结果不会有任何不同,区别主要是那些无法用64个二进制位精确表示的小数。这时,Math.fround
方法会返回最接近这个小数的单精度浮点数。
Math.hypot()
返回所有参数的平方和的平方根。
如果参数不是数值,Math.hypot
方法会将其转为数值。只要有一个参数无法转为数值,就会返回NaN
。对数方法
Math.expm1()
返回e^x - 1,即Math.exp(x) - 1
Math.log1p()
返回1 + x的自然对数,即Math.log(1 + x)
。如果x小于-1,返回NaN
Math.log10()
返回以10为底的x的对数。如果x小于0,则返回NaN。Math.log2()
返回以2为底的x的对数。如果x小于0,则返回NaN。三角函数方法
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)
好吧,感觉回到高数课堂了,,,不过,做图会方便很多吧。
二进制,八进制表示法
ES6明确规定,
二进制要用0b/0B
前缀
八进制要用0o/0O
前缀