JavaScript NaN和Infinity特殊值 [译]


Posted in Javascript onSeptember 20, 2012

1.NaN

在JavaScript中,NaN代表了“not a number”.主要在解析字符串出现错误时会返回这个值:

> Number("xyz") 
NaNNaN

的名字是“not a number”,不过也可以说是not not a number:

> NaN !== NaN 
true

它是一个数字!类型为"number"
> typeof NaN 
'number'

1.1 检测NaN
JavaScript中,NaN是惟一一个和自己也不想等的值.所以,也就不能使用等号运算符来判断一个值是否是NaN,不过有全局函数isNaN()来干这件事.
> isNaN(NaN) 
true

Kit Cambridge指出isNaN()的一个问题:它会隐式的将它的参数转换成数字,所以即便参数是个不能转换成数字的字符串,它也会返回true(转换成了NaN):

> Number("xyz") 
NaN 
> isNaN("xyz") 
true

由于相同的原因,isNaN对其他很多对象也返回true:

> Number({}) 
NaN 
> isNaN({}) 
true > Number(["xzy"]) 
NaN 
> isNaN(["xzy"]) 
true

重写了valueOf方法的自定义对象同样:
> var obj = { valueOf: function () { return NaN } }; 
> Number(obj) 
NaN 
> isNaN(obj) 
true

所以可以利用NaN是唯一一个满足(x !== x)不等式的值来写一个自己的isNaN函数,这样就不会有上面提到的问题:
function myIsNaN(x) { 
return x !== x; 
}

目前一个修正版的isNaN方法Number.isNaN()已经被添加到了ECMAScript 6中(译者注:Firefox已经实现了).Crockford实现的这个方法,比上面的myIsNaN更容易理解,核心代码是这样的:
Number.isNaN = function (value) { 
return typeof value === 'number' && isNaN(value); 
};

2.Infinity

用0作除数会产生另外一个特殊值Infinity:

> 3/0 
Infinity

你不能想当然的猜测正无穷大或者负无穷大的计算结果:
>Infinity - Infinity 
NaN

比无穷大还大的值仍然是无穷大:
> Infinity + Infinity 
Infinity> 5 * Infinity 
Infinity

3.参考

What is {} + {} in JavaScript?

Javascript 相关文章推荐
多广告投放代码 推荐
Nov 13 Javascript
Js组件的一些写法
Sep 10 Javascript
js 创建快捷方式的代码(fso)
Nov 19 Javascript
鼠标移到图片上变大显示而不是放大镜效果
Jun 15 Javascript
深入学习AngularJS中数据的双向绑定机制
Mar 04 Javascript
jquery遍历json对象集合详解
May 18 Javascript
详解Vue中使用v-for语句抛出错误的解决方案
May 04 Javascript
基于jQuery解决ios10以上版本缩放问题
Nov 03 jQuery
快速处理vue渲染前的显示问题
Mar 05 Javascript
记一次vue去除#问题处理经过小结
Jan 24 Javascript
javascript实现前端成语点击验证优化
Jun 24 Javascript
ES6中的类(Class)示例详解
Dec 09 Javascript
JavaScript 更严格的相等 [译]
Sep 20 #Javascript
JavaScript 反科里化 this [译]
Sep 20 #Javascript
Array.prototype.concat不是通用方法反驳[译]
Sep 20 #Javascript
JavaScript 用Node.js写Shell脚本[译]
Sep 20 #Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
Sep 20 #Javascript
javascript分页代码(当前页码居中)
Sep 20 #Javascript
javascript获取作用在元素上面的样式属性代码
Sep 20 #Javascript
You might like
php设置允许大文件上传示例代码
2014/03/10 PHP
PHP检测用户语言的方法
2015/06/15 PHP
用nodejs写的一个简单项目打包工具
2013/05/11 NodeJs
javascript页面加载完执行事件代码
2014/02/11 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
Javascript类型系统之String字符串类型详解
2016/06/21 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
JavaScript解析机制与闭包原理实例详解
2019/03/08 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
vue渲染方式render和template的区别
2020/06/05 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
Python中index()和seek()的用法(详解)
2017/04/27 Python
Python字符串处理实例详解
2017/05/18 Python
python登录并爬取淘宝信息代码示例
2017/12/09 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
python网络编程之五子棋游戏
2020/05/14 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
经典优秀个人求职自荐信格式
2013/09/25 职场文书
个人自我评价范文
2014/02/05 职场文书
高中毕业生的个人自我评价
2014/02/21 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
遗愿清单观后感
2015/06/09 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android