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截取函数(indexOf,join等)
Sep 01 Javascript
Dom操作之兼容技巧分享
Sep 20 Javascript
基于Jquery实现的一个图片滚动切换
Jun 21 Javascript
javaScript NameSpace 简单说明介绍
Jul 18 Javascript
JS字符串处理实例代码
Aug 05 Javascript
用javascript判断IE版本号简单实用且向后兼容
Sep 11 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
Jul 18 Javascript
Egret引擎开发指南之发布项目
Sep 03 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
Apr 16 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
Jul 01 Javascript
Vue 开发必须知道的36个技巧(小结)
Oct 09 Javascript
JS模拟实现京东快递单号查询
Nov 30 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
JpGraph php柱状图使用介绍
2011/08/23 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
PHP 计算两个特别大的整数实例代码
2018/05/07 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
PHP获取当前时间不准确问题解决方案
2020/08/14 PHP
js 图片轮播(5张图片)
2008/12/30 Javascript
JS下高效拼装字符串的几种方法比较与测试代码
2010/04/15 Javascript
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
利用JavaScript脚本实现滚屏效果的方法
2015/07/07 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
浅谈对Angular中的生命周期钩子的理解
2017/07/31 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
python获取标准北京时间的方法
2015/03/24 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
python正则表达式的使用
2017/06/12 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
2020/06/11 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
2020/12/13 Python
MIRTA官网:手工包,100%意大利制造
2020/02/11 全球购物
培训自我鉴定
2014/01/31 职场文书
婚礼主持词
2014/03/13 职场文书
培训研修方案
2014/06/06 职场文书
毕业证委托书范文
2014/09/26 职场文书
房屋产权证明书
2015/06/19 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
Golang 切片(Slice)实现增删改查
2022/04/22 Golang