学习内容:
- 二进制 0B
- 八进制 0O
- Number.isFinite()
- Number.isNaN()
- Number.parseInt()
- Number.parseFloat()
- Number.isInteger()
- 0.1 + 0.2 === 0.3 ?
- Math新增方法
ES5把十进制转为二进制
let i = 5
console.log(i.toString(2))
----
101
ES5把二进制转为十进制
let k = 101
console.log(parseInt(k, 2))
-----
5
ES6当中,0B表示二进制,0O表示八进制,字母大小写都可以
const a = 0B0101
console.log(a)
const b = 0O777
console.log(b)
--------
5
511
Number.isFinite()
判断是否是有限的
console.log(Number.isFinite(5)) // true
console.log(Number.isFinite(5/0)) // false
console.log(Number.isFinite(Infinity)) // false
console.log(Number.isFinite(true)) // false
console.log(Number.isFinite('test')) // false
Number.isNaN()
// NaN:not a number
console.log(Number.isNaN(NaN)) // true
console.log(Number.isNaN(10)) // false
Number.parseInt()、Number.parseFloat()
ES6中把window对象下的全局方法逐步移到相应的对象下面了
console.log(Number.parseInt(5.5)) // 5
console.log(Number.parseFloat(5.5)) // 5.5
console.log(window.parseInt(5.5)) // 5
console.log(window.parseFloat(5.5)) //5.5
Number.isInteger()
Number.isInteger(5) // true
Number.isInteger(5.5) // false
精度缺失的问题
ES里面,0.1+0.2 === 0.3 // false
let a = 0.1 + 0.2
console.log(a)
---------------------------
0.30000000000000004
首先,数字在计算机中是根据IEEE 754双精度标准存储的,简单理解存储一个数字需要的二进制的位数比较多,这样做的目的是存储数字更加的准确。
因为0.1变成二进制数值时无法被整除,
const a = 0.1
console.log(a.toString(2))
-----------------------------------------------------------
0.0001100110011001100110011001100110011001100110011001101
console.log(0.1000000000000001)
console.log(0.10000000000000001)
console.log(0.10000000000000001 === 0.1)
-----------------------
0.1000000000000001
0.1
true
ES6当中,整数的最大值是2的53次方
const max = Math.pow(2, 53)
console.log(max)
console.log(max + 1)
------------------------
9007199254740992
9007199254740992
const max = Math.pow(2, 53)
console.log(Number.MAX_SAFE_INTEGER)
console.log(Number.MAX_SAFE_INTEGER === max - 1)
console.log(Number.MIN_SAFE_INTEGER)
------------------------
9007199254740991
true
-9007199254740991
Math.trunc()
去除一个数的小数部分,返回整数部分
console.log(Math.trunc(5.5)) // 5
console.log(Math.trunc(-5.5)) // -5
console.log(Math.trunc(true)) // 1
console.log(Math.trunc(false)) // 0
console.log(Math.trunc(NaN)) // NaN
console.log(Number.parseInt(5.5)) // 5
console.log(Number.parseInt(-5.5)) // -5
console.log(Number.parseInt(true)) // NaN
Math.sign()
判断正负数和零
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()
返回立方根
console.log(Math.cbrt(8))
console.log(Math.cbrt('test'))
----
2
NaN