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 相关文章推荐
PJBlog插件 防刷新的在线播放器
Oct 25 Javascript
js 获取浏览器高度和宽度值(多浏览器)
Sep 02 Javascript
js判断图片加载完成后获取图片实际宽高的方法
Feb 25 Javascript
基于jQuery日历插件制作日历
Mar 11 Javascript
js无法获取到html标签的属性的解决方法
Jul 26 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
Oct 14 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
Oct 25 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
Mar 01 Javascript
jQuery length 和 size()区别总结
Apr 26 jQuery
js实现图片实时时钟
Jan 15 Javascript
Vue脚手架编写试卷页面功能
Mar 17 Javascript
JS算法教程之字符串去重与字符串反转
Dec 15 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,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
php文件服务实现虚拟挂载其他目录示例
2014/04/17 PHP
由document.body和document.documentElement想到的
2009/04/13 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
node.js中Socket.IO的进阶使用技巧
2014/11/04 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
2015/06/19 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
nodejs开发微信小程序实现密码加密
2017/07/11 NodeJs
Node.js学习教程之HTTP/2服务器推送【译】
2017/10/31 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
Python基于DES算法加密解密实例
2015/06/03 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
在python中,使用scatter绘制散点图的实例
2019/07/03 Python
Django框架视图介绍与使用详解
2019/07/18 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
详解python tkinter 图片插入问题
2020/09/03 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
2020/11/09 Python
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
草莓网化妆品澳大利亚站:Strawberrynet AU
2017/12/18 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
益模软件Java笔试题
2012/03/27 面试题
中学生班主任评语
2014/01/30 职场文书
大学生暑期实践感言
2014/02/26 职场文书
商场客服专员岗位职责
2014/06/13 职场文书
2014年法制宣传日活动方案
2014/11/02 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
公司优秀员工推荐信
2015/03/24 职场文书
代理词怎么写
2015/05/25 职场文书
技术入股协议书
2016/03/22 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
详解Laravel制作API接口
2021/05/31 PHP
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android