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 相关文章推荐
为指定元素增加样式的js代码
Dec 09 Javascript
js 获取服务器控件值的代码
Mar 05 Javascript
一些常用的JavaScript函数(json)附详细说明
May 25 Javascript
让AJAX不依赖后端接口实现方案
Dec 03 Javascript
JS分页效果示例
Oct 11 Javascript
JavaScript打印网页指定区域的例子
May 03 Javascript
jquery中使用循环下拉菜单示例代码
Sep 24 Javascript
Javascript removeChild()删除节点及删除子节点的方法
Dec 27 Javascript
Bootstrap Table使用整理(一)
Jun 09 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
Nov 30 Javascript
javascript递归函数定义和用法示例分析
Jul 22 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
Mar 01 Vue.js
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操作数组相关函数
2011/02/03 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
php生成shtml类用法实例
2014/12/09 PHP
php中curl使用指南
2015/02/05 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
JS字符串处理实例代码
2013/08/05 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
JS函数的几种定义方式分析
2015/12/17 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
利用vue实现模态框组件
2016/12/19 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
bootstrap弹出层的多种触发方式
2017/05/10 Javascript
详解基于node的前端项目编译时内存溢出问题
2017/08/01 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
微信小程序实现循环动画效果
2018/07/16 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
详解python中的json的基本使用方法
2016/12/21 Python
python实时监控cpu小工具
2018/06/21 Python
python使用配置文件过程详解
2019/12/28 Python
Python实现的北京积分落户数据分析示例
2020/03/27 Python
CSS3 @keyframes简单动画实现
2018/02/24 HTML / CSS
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
大专毕业生自我鉴定
2013/11/21 职场文书
企业申诉管理制度
2014/01/30 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
高一军训决心书
2015/02/05 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书
Python爬虫基础之爬虫的分类知识总结
2021/05/13 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python
Flutter Navigator 实现路由传递参数
2022/04/22 Java/Android