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 post方式传递提交的实现代码
May 31 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
May 27 Javascript
jQuery替换字符串(实例代码)
Nov 13 Javascript
JavaScript立即执行函数的三种不同写法
Sep 05 Javascript
当前流行的JavaScript代码风格指南
Sep 10 Javascript
js实现获取div坐标的方法
Nov 16 Javascript
分享网页检测摇一摇实例代码
Jan 14 Javascript
基于Node.js实现nodemailer邮件发送
Jan 26 Javascript
JavaScript实现简单的树形菜单效果
Jun 23 Javascript
JavaScript类型相关的常用操作总结
Feb 14 Javascript
微信小程序入口场景的问题集合与相关解决方法
Jun 26 Javascript
JS实现网页时钟特效
Mar 25 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截取utf-8中文字符串乱码的解决方法
2010/03/29 PHP
php定界符
2014/06/19 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
PHP调用其他文件中的类
2018/04/02 PHP
JavaScript事件列表解说
2006/12/22 Javascript
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
js实现楼层导航功能
2017/02/23 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
Vue + Vue-router 同名路由切换数据不更新的方法
2017/11/20 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
Vue.js递归组件实现组织架构树和选人功能
2019/07/04 Javascript
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
2020/05/08 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
python 判断自定义对象类型
2009/03/21 Python
python list 合并连接字符串的方法
2013/03/09 Python
python网络编程示例(客户端与服务端)
2014/04/24 Python
Python函数式编程指南(三):迭代器详解
2015/06/24 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
python操作redis方法总结
2018/06/06 Python
python爬取哈尔滨天气信息
2018/07/14 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
python实现图片转字符画
2021/02/19 Python
最新创业融资计划书
2014/01/19 职场文书
2015年端午节活动策划书
2015/05/05 职场文书
团支部书记竞选稿
2015/11/21 职场文书
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技