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 相关文章推荐
如何让DIV可编辑、可拖动示例代码
Sep 18 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
Apr 21 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
Mar 29 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
Jan 04 Javascript
Javascript网页抢红包外挂实现分享
Jan 11 Javascript
angularJS1 url中携带参数的获取方法
Oct 09 Javascript
JS隐藏号码中间4位代码实例
Apr 09 Javascript
小程序使用wxs解决wxml保留2位小数问题
Dec 13 Javascript
JS监听组合按键思路及实现过程
Apr 17 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
Jun 04 Javascript
如何实现echarts markline标签名显示自己想要的
Jul 20 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 strtok()函数的优点分析
2010/03/02 PHP
php 数据库字段复用的基本原理与示例
2011/07/22 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
2013/06/24 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
PHP简单实现生成txt文件到指定目录的方法
2016/04/25 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
PHP基本语法实例总结
2016/09/09 PHP
phpStudy配置多站点多域名和多端口的方法
2017/09/01 PHP
js 格式化时间日期函数小结
2010/03/20 Javascript
js转义字符介绍
2013/11/05 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
javascript文本框内输入文字倒计数的方法
2015/02/24 Javascript
原生js和jQuery写的网页选项卡特效对比
2015/04/27 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
PyTorch中Tensor的拼接与拆分的实现
2019/08/18 Python
Django import export实现数据库导入导出方式
2020/04/03 Python
美国电视购物HSN官网:HSN
2016/09/07 全球购物
中国跨境电子商务网站:NewFrog
2018/03/10 全球购物
Aosom西班牙:家具在线商店
2020/06/11 全球购物
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
入股协议书范本
2014/04/14 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
产品质量保证书范本
2015/02/27 职场文书