Number
Number 以 64 位的格式 IEEE-754 存储,也被称为“双精度浮点数”。
只要是 IEEE-754 的都会存在计算不精准的问题,如 0.1 + 0.2 并不等于 0.3。
在 JavaScript 中进行数学运算,是安全的。
无论你怎么弄,它不会报错,不会 Error(NaN) ,但是代价是 特殊数值(special numeric values):
- Infinity / 无穷大
- -Infinity
- NaN / Not a Number
与 NaN 进行运算只会得到 NaN。
_
_ 只会优化显示
js
let billion = 1000000000;
// 二者相同,不会发生任何副作用。
let billion = 10_0000_0000;e
e9 代表后面 9 个 0;
js
let billion = 1e9;
// 二者相同
let billion = 10_0000_0000;-e
js
(1e-3 == 1 / 1000) == 0.001;Binary、Octal、Hex
Binary —— 2 进制
Octal8 —— 进制
Hex16 —— 进制
js
let a = 0b11111111; // b 二进制
let b = 0o377; // o 八进制
let c = 0xff; // x 十六进制 ;十六进制大小写都是可以的
进制转换
100..toString(2);
parseInt("1100100", 2);toString(base)的 base 最大支持 36
rounding
floor 向后
ceil 向前
round 四舍五入
trunc 移除 小数点后数字
小数点后两位
js
Math.floor(num * 100) / 100;
// 或
num.toFixed(2);toFixed 的结果是字符串。
有点是,例如 12 这样的整数,他会给你补为 12.00。
NaN 和 Infinity
NaN 代表一个错误,并且 NaN 是不等于 NaN
Infinity(和 -Infinity)是一个特殊的数值,比任何数值都大(小)
apis:
isNaN 判断是否为 NaN。若有必要,则首先将值转换为数字。
Number.isNaN 不会转换类型,为更优解。
isFinite 判断是否为 finite number( 有限数值)。在必要情况下,参数会首先转为一个数值。
Number.isFinite 同理,不会转换。
Object.is
Object.is 和 === 几乎相同,但是有两点例外
- Object.is 能识别 NaN
- Object.is 能区分 0 和 -0
js
Object.is(NaN, NaN); // true
Object.is(0, -0); // falseparseInt 和 parseFloat
从 string 中读取 number。读到不能读为止。
js
parseInt("bhl41i"); // NaN
parseInt("bhl41i", 36); // 694666422
parseInt(" 100 0 "); // 100
parseInt("100c"); // 100
parseInt("c100"); // NaN!!
parseInt("192.168.0.1"); // 192
parseFloat("192.168.0.1"); // 192.168Math
random 随机数
max min
pow(n, power),和 n ** power 一样的