这是我参与8月更文挑战的第16天,活动详情查看:8月更文挑战
前言
大家好哇,今天来记录一下javascript的数字,内容主要参考《你不知道的JavaScript》(中卷),同时会加上自己的思考,以及实践的例子,有道是好记性不如烂笔头,读了书一定要勤做笔记,这样不仅记的牢固,也能提升自己的水平。
正文
提前说明哦,这是一篇前端笔记类的文章,属于个人记录。各位高人请绕道勿喷,谢谢~
数字
JavaScript使用“双精度”格式(即64位二进制)
数字前的0和小数位最后的0,都可以省略。如:
0.42 === .42 // true
42.30 === 42.3 // true
特别大和特别小的数字默认指数格式显示,与toExponential()函数的输出结果相同。
let a = 5E10 // 50000000000
a.toExponential() // "5e+10"
let c = 1/a // "2e-11"
. 运算符优先被当作数字的一部分,然后再作为对象属性访问运算符
比如:
100.toFixed(2) // SyntaxError
.1.toFiexd(2) // 0.10
100 .toFixed(2) // 100.00
(100).toFixed(2) // 100.00
100..toFixed(2) // 100.00
即:如果把 . 算在旁边的数字中合法,就会把它当作是数字的一部分
浮点数的精度, 可以用误差值范围解决,避免出现 0.1+0.2 !== 0.3 的情况。
误差值范围即设定一个误差范围值,两个数相减结果小于这个值即判定相等。
ES6定义了这个值是Number.EPSILON,对ES6之前的版本可以声明Number.EPSILON = Math.pow(2,-52)。
js最大的浮点数约是1.798e+308,定义在Number.MAX_VALUE中。
js最小的浮点数约是5e-324,定义在Number.MIN_VALUE中,无限接近于0。
整数的安全范围最大值是2^53-1,即9007199254740991,在ES6中被定义为Number.MAX_SAFE_INTEGER
整数的安全范围最小值是-9007199254740991,在ES6中被定义为Number.MIN_SAFE_INTEGER
超出一定位数的数字应该用字符串来表示,如多位的ID等。
检测整数:Number.isInteger(num),返回true或者false,等价于:
typeof num == 'number' && num%1 == 0
检测是否安全范围整数:Number.isSafeInteger(num),返回true或者false,等价于:
Number.isInteger(num) && Math.abs(num) <= Number.Max_SAFE_INTEGER
null:空值(曾赋过值,但是现在没有值),是特殊关键字,不能当成变量来使用和赋值
undefined:没有值(从未赋过值),是标识符,可以当成变量来使用或赋值(严格模式下仅能声明局部变量为undefined),重新定义undefined是不好的。
void能让表达式不返回值,如void XXX 结果是undefined。
特殊数值
NaN: 不是数字的数字,但仍为数字类型,并且是js里唯一一个非自反的值,即:NaN != NaN
判断一个值是否为NaN可以用isNaN(),不过isNAN有bug,它的判断条件是,参数既不是NaN,又不是数字
在ES6中我们应该使用Number.isNaN()来判断NaN,它等价于:
typeof(n) === "number" && windows.isNaN(n)
更简单的做法是判断这个值是不是不等于自身,因为NaN是js里唯一非自反的值
无穷数: js使用有限数字表示法,当js的运算结果超出处理范围则进行就近取整为Number.MAX_VALUE或Number_MIN_VALUE,若是溢出(js的数字范围),结果就是Infinity或者-Infinity。
由有穷数可以得到无穷数,但是无穷数不能得到有穷数。
零值: js中有0和-0,对数字-0进行转字符串的操作会返回'0',但是对字符串'-0'转数字的操作会返回-0
0 === -0 // true
ES6的新方法Object.is()来处理特殊值的比较,来判断两个值是否绝对相等,可用于判断NaN和-0的情况
Object.is(NaN,NaN) // true
Object.is(0,-0) // false
后记
你好哇,我是南极大冰块,一个技术与颜值成正比的前端工程师,崇尚一针见血的搞定前端问题,希望我的博客有帮助到了你。
关注我,前端路途一起走。嘿哈~😛