写在前头
大多数小伙伴看技术书籍都会用“啃”来描述读书的直观感受,当然我也是一个前端小白,白的透明那种,但是我在读技术书籍感觉到“啃”的时候,我希望把我啃红宝书第四版的过程的想法,总结带给大家,以供后来者能够更快上手。
注: 本文由于作者水平原因,如有错误之处,恳请大家指正,另外随着学习的深入,体会的加深,我会不断回来更新,修改这类文章。
思维导图
脉络
这小节就是介绍了3.4数据类型中的3.4.5Number类型的3.值的范围,4.NaN。
3.4数据类型
3.4.5Number类型
3.值的范围
- 原因
存储数据需要内存,因此ECMAScript 并不支持表示这个世界上的所有数值(内存限制)。
- Number.MIN_VALUE
用于存储ES可以表示的最小值
- Number.MAX_VALUE
用于存储ES可以表示的最大值
- 自动转换
- 数值结果超出范围
数值超出js可以表示的范围,那么js就会将数值转换为可以表示的数值。例如正无穷,负无穷。
- 特殊的 Infinity(无穷)值
①表示无法表示的正负数 无法表示的正数:Infinity 无法表示的负数:-Infinity
- 计算返回正 Infinity 或负 Infinity
当计算时返回无穷值时,那么就不用再继续进行后续计算了,原因:Infinity 没有可用于计算的数值表示形式。
- isFinite()函数
这个函数用于验证一个数是否可以由js表示(在最大数和最小数之间)。
const result1 = Number.MAX_VALUE + 1; console.log(isFinite(result1)); // true const result2 = Number.MAX_VALUE + Number.MAX_VALUE ; console.log(isFinite(result2)); // false 复制代码
为什么result1可以输出true? 这证明js可以表示他,不用转换为无穷大,但是明确知道他比Number.MAX_VALUE大了呀?
原因: IEEE 754 标准规定: 只有大于等于
的数才会被 round 到 Infinity. 而 Number.MAX_VALUE 才是
, 加上 1 还远远不到 Infinity.
- 监测计算结果是否超出范围
当使用很大或者很小的数字时,我们最好使用 isFinite()函数 检查一下,计算结果是否超出范围。
- 使用 Number.NEGATIVE_INFINITY 和 Number.POSITIVE_INFINITY
这2个属性的值正好对应Infinity和-Infinity。
4.NaN
- 含义,作用
含义:就是表示不是一个数。
作用:用于表示本来要返回数值的操作失败了(而不是抛出错误)。比如因为某些原因计算终止。
- 除法
- 分子为0
分子分母都包含0,不论正反,均为NaN。
- 分子不为0,分母为0
分子不为0,那么根据符号判断是Infinity或-Infinity。
- 属性
- 操作始终返回 NaN
①任何涉及 NaN 的操作始终返回 NaN(如 NaN/10)(书上原话)。
- NaN 不等于包括 NaN 在内的任何值 (使用比较运算符用于是false)
console.log(NaN === NaN); // false 复制代码
- 判断一个值是不是 NaN
①isNaN()函数
②Number.isNaN()
2者都是判断一个值是不是 NaN,前者会将参数转换为数值,再进行判断,后者不会强制转换参数类型。推荐使用后者。