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 相关文章推荐
extjs 学习笔记(三) 最基本的grid
Oct 15 Javascript
IE8下String的Trim()方法失效的解决方法
Nov 08 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
Apr 10 Javascript
jQuery函数的第二个参数获取指定上下文中的DOM元素
May 19 Javascript
jquery的clone方法应用于textarea和select的bug修复
Jun 26 Javascript
jquery对象和javascript对象即DOM对象相互转换
Aug 07 Javascript
node+express+jade制作简单网站指南
Nov 26 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
Nov 15 Javascript
每天一篇javascript学习小结(面向对象编程)
Nov 20 Javascript
js实现拖拽效果(构造函数)
Dec 14 Javascript
使用React实现轮播效果组件示例代码
Sep 05 Javascript
轻松理解JavaScript闭包
Mar 14 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 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
2018/09/07 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
JavaScript实现复制功能各浏览器支持情况实测
2013/07/18 Javascript
利用js制作html table分页示例(js实现分页)
2014/04/25 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
JavaScript 闭包机制详解及实例代码
2016/10/10 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
vue中axios解决跨域问题和拦截器的使用方法
2018/03/07 Javascript
Vue render深入开发讲解
2018/04/13 Javascript
node.js实现上传文件功能
2019/07/15 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
VUE实现移动端列表筛选功能
2019/08/23 Javascript
JS手写一个自定义Promise操作示例
2020/03/16 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
2020/11/02 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
[49:58]完美世界DOTA2联赛PWL S3 Magma vs DLG 第一场 12.18
2020/12/19 DOTA
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
python中使用print输出中文的方法
2018/07/16 Python
python简单操作excle的方法
2018/09/12 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
html5 学习简单的拾色器
2010/09/03 HTML / CSS
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
导购员的岗位职责
2014/02/08 职场文书
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
postgresql使用filter进行多维度聚合的解决方法
2021/07/16 PostgreSQL
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android