④写给后端工程师的JavaScript教程——js有趣的非数字值NaN、Infinity
来源:互联网 发布:算法导论pdf百度云 编辑:程序博客网 时间:2024/05/31 05:28
js中的数字
js中的数字是不区分整数值和浮点数值的,所有的数字均用浮点数值表示。那么数字类型可以表示的范围是怎么样的呢?
js使用IEEE754(二进制浮点数标准)来表示整数和浮点数。
在js中数字类型的最小值为:5e-324
最大值为:1.7976931348623157e+308
注意下这两个边界
在后端开发中我们知道如果数字操作或者运算后的范围超出这个边界那么就会报溢出的错误。但是在js中会不会也这样报错呢?
console.log(Number.MAX_VALUE+Number.MAX_VALUE);console.log(-Number.MAX_VALUE-Number.MAX_VALUE);
两个最大值相加肯定会超出他本身,那么就会溢出,溢出后js的输出结构又是怎么样的呢?
Infinity-Infinity
这就说明js的上溢结果为Infinity,下溢结果为-Infinity而不是报错。这和后端语言不一样。
JS的溢出计算
在js中有个很有意思的运算1/0 在后端工程师中都知道0不能作为除数,这个我们小学数学中背过的规则,那么在js中会怎样呢?
console.log(1/0);console.log(1/-0);
输出结果为:
Infinity
-Infinity
本来我们知道0的正负都没有意义的,那在这儿0的正负都参与了运算而且还没有报错。其实这是很有挑战很有魅力的运算
再来看两个有趣的判断:
console.log(1/0 === 1/-0);console.log(0 === -0);
输出结果:
false
true
本来感觉刷新三观了,但是别急。慢慢来想这个还是有道理的,0的正负本来是没有意义的,那么他们两是相等的。Infinity和-Infinity自然是不相等的,所以大家要理性的来分析这件事。
特殊的非数字值NaN
js中的非数字值是非常非常特殊的,他和任何值都不相等,包括自身。所以就不能用作判断语句使用。
NaN来自何处
其实NaN本来是Number的一个属性,可以这样来使用Number.NaN。但是在后续版本中也可以使用NaN这种预定义的全局属性来直接使用。在哪些情况下会返回NaN呢?一些求根或者转换中会生成,比如以下的代码:
var s = parseInt('marswill');console.log(s == NaN);
这儿我们做了两个验证,第一个为parseInt转换数据成Int时如果传入参数为非数字会返回NaN。第二个问题为返回的NaN和全局NaN并不相等,虽然两者显示一模一样但是确实不相等。
正确的处理方法
刚刚已经演示了NaN结果不能直接使用 s == NaN来比较那么怎么样处理呢?
有一个isNaN()来判断:
var s = parseInt('魏永强 http://blog.csdn.net/marswill');console.log(s == NaN);if (isNaN(s)) { console.log('非数字');}else{ console.log('是数字');}
返回结果为非数字
- ④写给后端工程师的JavaScript教程——js有趣的非数字值NaN、Infinity
- ②写给后端工程师的JavaScript教程——JS数据类型
- ①写给后端工程师的JavaScript教程——从这里开始
- ③写给后端工程师的JavaScript教程——变量申明
- JavaScript语言精粹(一) — 数字、NaN和Infinity
- 奇怪的js NaN and Infinity
- C#的Infinity和NaN
- JavaScript:NaN和Infinity
- js中容易被忽略的数字类型--Infinity
- js中的特殊数值——NaN,+0,-0,Infinity,undefined,null
- 写给女友的JS教程—之JS闭包
- Java浮点运算中特殊的情况NAN与Infinity
- 关于Java中NaN,Infinity,-Infinity参与算术运算的各种情况
- JavaScript中的NaN、Infinity、null和undefined
- Javascript 中的非空判断 undefined,null, NaN的区别
- JS中的非空判断 undefined,null, NaN的区别
- JavaScript的NaN为什么不等于NaN
- java中有趣的NaN类型
- [USACO1.3]滑雪课程设计Ski Course Design
- UVa213
- 在Macbook Pro上为TensorFlow设置GPU
- Android7.0中文文档(API)-- GridView
- Swift3.0 Result of call to 'XXX' is unused
- ④写给后端工程师的JavaScript教程——js有趣的非数字值NaN、Infinity
- 计算机文化学习笔记5
- Mac OSX 无共享的密钥情况下连接基于L2TP协议的VPN
- 进程池流程
- solr 对数据添加索引
- Hdu 4498 自适应辛普森积分
- Windows学习(008)--线程(一)
- 关于apk打包,报java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap cannot be cast to 的错误
- sql获取分组后的第二条数据 group by limit