Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
ES系列文章
二进制和八进制表示法
- 在ES6中提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。
//es5中
// 十进制 -> 二进制
const a = 5 // 101
console.log(a.toString(2))
// 二进制 -> 十进制
const b = 101
console.log(parseInt(5.5))
console.log(parseInt(b, 2))
从es5开始,严格模式中,八进制就不再允许使用前缀0表示,在es6进一步明确,要使用前缀0o表示。
// ES6中 0B二进制 0O八进制
const a = 0B0101
console.log(a)
const b = 0O777
console.log(b)
Number.isFinite(),Number.isNaN()
es6在Number对象中,新提供了Number.isFinite()和Number.isNaN()两个方法。
- Number.isFinite()用来检查数值是否为有限的( finite )
console.log(Number.isFinite(5))
console.log(Number.isFinite(0.5))
console.log(Number.isFinite(Infinity)) // false
console.log(Number.isFinite('imooc')) // false
console.log(Number.isFinite(true)) // false
- Number.isNaN()用来检查值是否为NaN。
NaN:not a number
console.log(Number.isNaN(NaN)) // true
console.log(Number.isNaN(15)) // false
isFinite()
和isNaN()
区别在于,传统方法会先调用Number()
将非数值转换为数值,再进行判断。因此这两个方法只对数值有效,对于非数值一律返回false。
Number.parseInt(), Number.parseFloat()
- 在es6中将全局方法parseInt()和parseFloat(),逐渐模块化。移植到 Number 对象上面,行为完全保持不变。
console.log(Number.parseInt(5.5))
console.log(Number.parseFloat(5.5))
console.log(window.parseInt(5.5))
console.log(window.parseFloat(5.5))
Number.isInteger()
- Number.isInteger()用来判断一个值是否为整数。在 JavaScript 内部,整数和浮点数是同样的储存方法,所以 3 和 3.0 被视为同一个值。
console.log(Number.isInteger(5))
console.log(Number.isInteger(5.5))
0.1+0.2 === 0.3(面试官) 全整数,Number.isSafeInteger()
在es6中引入了Number.MAX_SAFE_INTEGER
(最大值)和Number.MIN_SAFE_INTEGER
(最小值)这两个常量,来表示安全整数的范围。Number.isSafeInteger()
是用来判断参数是否是一个安全的整数。
// IEEE 754 双精度标准
35 -> 00100011
0.375 -> 0.011
0.1 -> 0.000110011....
console.log(0.1000000000000001)
console.log(0.10000000000000001 === 0.1) // true
const max = Math.pow(2, 53)
console.log(max)
console.log(max + 1)
console.log(Number.MAX_SAFE_INTEGER === max - 1)
console.log(Number.MIN_SAFE_INTEGER)
console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER))
console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1))
Math对象
Math.trunc
方法用于去除一个数的小数部分,返回整数部分。对于非数值,Math.trunc
内部使用Number
方法将其先转为数值,对于空值和无法截取整数的值,返回NaN
。
console.log(Math.trunc(5.5))
console.log(Math.trunc(-5.5))
console.log(Math.trunc(true)) // 1
console.log(Math.trunc(false)) // 0
console.log(Math.trunc(NaN)) // NaN
console.log(Math.trunc(undefined)) // NaN
console.log(Math.trunc()) // NaN
console.log(Number.parseInt(5.5))
console.log(Number.parseInt(-5.5))
console.log(Number.parseInt(true)) // NaN
Math.sign
方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。
- 参数为正数,返回+1
- 参数为负数,返回-1
- 参数为 0,返回0
- 参数为-0,返回-0
- 其他值,返回NaN
console.log(Math.sign(5)) // 1
console.log(Math.sign(-5)) // -1
console.log(Math.sign(0)) // 0
console.log(Math.sign(NaN)) // NaN
console.log(Math.sign(true)) // 1
console.log(Math.sign(false)) // 0
Math.cbrt
方法用于计算一个数的立方根。对于非数值,Math.cbrt
方法内部也是先使用Number
方法将其转为数值,不能转换,则返回NaN
console.log(Math.cbrt(8))
console.log(Math.cbrt('imooc')) // NaN
ES7数值扩展
- 幂运算符: **
- 等同于Math.pow()
//2 10 -> 1024
function pow(x, y) {
let res = 1
for (let i = 0; i < y; i++) {
res *= x
}
return res
}
console.log(pow(2, 10))
console.log(Math.pow(2, 10))
console.log(2 ** 10)
一个前端小白,若文章有错误内容,欢迎大佬指点讨论!