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 相关文章推荐
表格 隔行换色升级版
Nov 07 Javascript
js的alert弹出框出现乱码解决方案
Sep 02 Javascript
JS页面延迟执行一些方法(整理)
Nov 11 Javascript
window.location不跳转的问题解决方法
Apr 17 Javascript
js获取checkbox复选框选中的选项实例
Aug 24 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
Nov 28 Javascript
微信小程序本地缓存数据增删改查实例详解
May 24 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
Sep 19 Javascript
深入理解Node.js中通用基础设计模式
Sep 19 Javascript
微信小程序模板template简单用法示例
Dec 04 Javascript
Vuepress 搭建带评论功能的静态博客的实现
Feb 17 Javascript
Vue2.0 $set()的正确使用详解
Jul 28 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
phpmyadmin MySQL 加密配置方法
2009/07/05 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
js 数组的for循环到底应该怎么写?
2010/05/31 Javascript
JSON 和 JavaScript eval使用说明
2010/06/13 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
2013/11/15 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
vue实现微信分享功能
2018/11/28 Javascript
详解webpack 最简打包结果分析
2019/02/20 Javascript
React传值 组件传值 之间的关系详解
2019/08/26 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
python顺序执行多个py文件的方法
2019/06/29 Python
在python中画正态分布图像的实例
2019/07/08 Python
django中SMTP发送邮件配置详解
2019/07/19 Python
python实发邮件实例详解
2019/11/11 Python
python实现图片插入文字
2019/11/26 Python
python制作一个简单的gui 数据库查询界面
2020/11/19 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
C#的几个面试问题
2016/05/22 面试题
医院实习介绍信
2014/01/12 职场文书
毕业生学校组织意见
2015/06/04 职场文书
MySQL实现配置主从复制项目实践
2022/03/31 MySQL