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之带图片的下拉列表框插件
Mar 04 Javascript
JS实现很酷的EMAIL地址添加功能实例
Feb 28 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
Dec 09 Javascript
JS组件系列之Bootstrap table表格组件神器【终结篇】
May 10 Javascript
jQuery实现6位数字密码输入框
Dec 29 Javascript
原生JS实现导航下拉菜单效果
Nov 25 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
Jul 03 Javascript
PHP自动加载autoload和命名空间的应用小结
Dec 01 Javascript
JS学习笔记之闭包小案例分析
May 29 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
Sep 06 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
Jun 02 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
Oct 27 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
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
用PHP查询搜索引擎排名位置的代码
2010/01/05 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
2014/07/29 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
php获取一定范围内取N个不重复的随机数
2016/05/28 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
csdn 批量接受好友邀请
2009/02/19 Javascript
Js 获取当前日期时间及其它操作实现代码
2021/03/04 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
js控制input框只读实现示例
2014/01/20 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
JS获得图片alt信息的方法
2015/04/01 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
基于vue+ bootstrap实现图片上传图片展示功能
2017/05/17 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
Django使用多数据库的方法
2017/09/06 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
webpack.DefinePlugin与cross-env区别详解
2020/02/23 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
在Docker上开始部署Python应用的教程
2015/04/17 Python
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
如何使用python写截屏小工具
2020/09/29 Python
Python self用法详解
2020/11/28 Python
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
生物化学研究助理员求职信
2013/10/09 职场文书
学前教育毕业生自荐信范文
2013/12/24 职场文书
空中乘务员岗位职责
2014/03/08 职场文书
《花木兰》教学反思
2014/04/09 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
幼儿园园长六一致辞
2015/07/31 职场文书