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 相关文章推荐
JQuery 学习笔记 选择器之二
Jul 23 Javascript
Jquery 一次处理多个ajax请求的代码
Sep 02 Javascript
JS自调用匿名函数具体实现
Feb 11 Javascript
js模拟hashtable的简单实例
Mar 06 Javascript
完美解决input[type=number]无法显示非数字字符的问题
Feb 28 Javascript
微信小程序 chooseImage选择图片或者拍照
Apr 07 Javascript
js 获取json数组里面数组的长度实例
Oct 31 Javascript
javaScript字符串工具类StringUtils详解
Dec 08 Javascript
vue组件三大核心概念图文详解
May 30 Javascript
JS数组进阶示例【数组的几种函数用法】
Jan 16 Javascript
Vue环境搭建+VSCode+Win10的详细教程
Aug 19 Javascript
vue中watch和computed的区别与使用方法
Aug 23 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二分法在IP地址查询中的应用
2008/08/12 PHP
PHP 类商品秒杀计时实现代码
2010/05/05 PHP
php文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
PHP大转盘中奖概率算法实例
2014/10/21 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
2014/10/16 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
JS正则表达式常见用法实例详解
2018/06/19 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
2020/04/30 jQuery
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
[51:44]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第二场
2018/04/04 DOTA
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
深入理解Python中的super()方法
2017/11/20 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
2018/05/26 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
Pandas读写CSV文件的方法示例
2019/03/27 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
利用Pycharm + Django搭建一个简单Python Web项目的步骤
2020/10/22 Python
python 操作excel表格的方法
2020/12/05 Python
澳大利亚最大的百货公司:Myer
2018/12/21 全球购物
初中科学教学反思
2014/01/21 职场文书
求职信需要的五点内容
2014/02/01 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
现场活动策划方案
2014/08/22 职场文书
2014年电工工作总结
2014/11/20 职场文书
酒店前台辞职书
2015/02/26 职场文书
自主招生自荐信格式
2015/03/04 职场文书
pandas数值排序的实现实例
2021/07/25 Python
分享提高 Python 代码的可读性的技巧
2022/03/03 Python