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 相关文章推荐
鼠标图片振动代码
Jul 06 Javascript
javascript json2 使用方法
Mar 16 Javascript
jQuery中:button选择器用法实例
Jan 04 Javascript
JS判断字符串变量是否含有某个字串的实现方法
Jun 03 Javascript
jquery  实现轮播图详解及实例代码
Oct 12 Javascript
详解如何实现一个简单的 vuex
Feb 10 Javascript
node结合swig渲染摸板的方法
Apr 11 Javascript
webstorm添加*.vue文件支持
May 08 Javascript
echarts多条折线图动态分层的实现方法
May 24 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
Dec 27 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
Mar 07 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
Oct 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
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
php验证手机号码
2015/11/11 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
JavaScript 中有关数组对象的方法(详解)
2016/08/15 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
2016/12/15 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
Node.js服务器开启Gzip压缩教程
2017/08/11 Javascript
Vue一次性简洁明了引入所有公共组件的方法
2018/11/28 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
pycharm 使用心得(五)断点调试
2014/06/06 Python
浅谈python 四种数值类型(int,long,float,complex)
2016/06/08 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
python读取xml文件方法解析
2020/08/04 Python
CSS3实现任意图片lowpoly动画效果实例
2017/05/11 HTML / CSS
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
高三自我鉴定范文
2013/10/19 职场文书
行政总经理岗位职责
2013/12/05 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
仓库组长岗位职责
2014/01/29 职场文书
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
保护环境建议书300字
2014/05/13 职场文书
企业安全生产责任书范本
2014/07/28 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
社会实践单位意见
2015/06/05 职场文书
发票退票证明
2015/06/24 职场文书
mysql脏页是什么
2021/07/26 MySQL
Oracle用户管理及赋权
2022/04/24 Oracle