NaN,即非数值(Not a Number)是一个特殊的值,这个数值表示本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。比如在其他语言中

任何数值除以0都会导致错误而终止程序执行。但是在ECMAScript中,会返回出特殊的值,因此不会影响程序的执行。

var box=0/0;                //NaN;

var box=12/0;             //Infinity;

var box=12/0*0;         //NaN;

可以通过Number.NaN得到NaN的值,任何与NaN进行运算的结果均会为NaN,NaN与自身不相等(NaN不与任何值相等)。

alert(Number.NaN);  //NaN

alert(NaN+1);            //NaN

alert(NaN==NaN);   //false

ECMAScript提供isNaN()函数,用来判断这个是不是NaN。isNaN()函数在接收到一个值后,会尝试将这个值转换成数值。

alert(isNaN(NaN));    //true;

alert(isNaN(25));        //false  25是个数值

alert(isNaN('25'));      //false  '25'是一个字符串数值,可以转换成数值

alert(isNaN('Lee'));   //true  'Lee'是个字符串,不能转化成数值

alert(isNaN(true));    //false  true可以转换成1

isNaN()函数也适用于对象。在调用 isNaN()函数过程中,首先会调用 valueOf()方法,然
后确定返回值是否能够转换成数值。如果不能,则基于这个返回值再调用 toString()方法,
再测试返回值

var box={
toString:function(){
return 'lee';
}
};
alert(isNaN(box));

有三个函数可以把非数值转换成数值:Number()、parseInt()和parseFloat()。Number()是转换型函数,可以用于任何数据类型,而另外两个则

专门用于把字符串转换成数值。

alert(Number(true));      //1,Boolean类型的true和false分别转换成1和0
alert(Number(25));        //25,数值类型直接返回
alert(Number(null));      //0,空对象返回0
alert(Number(undefined));//NaN,undefined返回NaN

如果是字符串增寻以下规则:

1、只包含数值的字符串,会直接转换成十进制数值,如果包含前导0,即会自动去掉

alert(Number('456'));  //465
alert(Number('070'));  //70

2、只包含浮点数值的字符串,会直接转换成浮点数值,如果包含前导和后导0,即会自动去掉。

alert(Number('08.50')); //8.5

3、如果字符串为空,那么直接转换成0.

alert(Number(''));  //0

4、如果不是以上三种字符串类型,则会返回NaN。

alert(Number('lee123')); //NaN

5、如果是对象,首先会调用valueOf()方法,然后确定返回值是否能够转化成数值。如果转化的结果是NaN,则基于这个返回值再调用toString()方法,在测试返回值。

var box={

toString:function(){

return '123';

}

};

alert(Number(box));  //123

var box={
  toString:function(){
    return 'lee';   
  }
};
alert(Number(box));  //NaN

由于Number()函数在转换字符串时比较复杂且不够合理,因此在处理整数的时候更常用的是parseInt()。

alert(parseInt('465lee'));             //465,返回整数部分

alert(parseInt('lee465lee'));       //NaN,如果第一个不是数值,就会返回NaN

alert(parseInt('12lee56lee'));    //12,从第一个数值开始取,到最后一个连续数值结束

alert(parseInt(56.12));               //56,小数点不是数值,会被去掉。

alert(parseInt(''));                       //NaN,空返回NaN

parseInt()除了可以识别十进制数,开可以识别八进制和十六进制。

alert(parseInt('0xA'));         //10,十六进制

alert(parseInt('070'));         //56,八进制

alert(parseInt('0xALee'));  //100,十六进制,Lee被自动过滤

ECMAScript为parseInt()提供了第二参数,用于解决各种的进制转换。

alert(parseInt('0xAF'));                     //175,十六进制

alert(parseInt('AF',16));                 //157,第二参数指定十六进制,可以去掉0x前导

alert(parseInt('AF'));                      //NaN,这里看作字符串,理所当然NaN

alert(parseInt('101010101',2));  //314,二进制转换

alert(parseInt('70',8));                  //56,八进制转换

parseFloat()是用于浮点数值的转换,和parseInt()一样,从第一位解析到浮点数值位置。

alert(parseFloat('123Lee'));   //123,去掉不能识别的部分
alert(parseFloat('0xA'));         //0,不认识十六进制
alert(parseFloat('123.4.5'));  //123.4,只认一个小数点
alert(parseFloat('0123.400')); //123.4去掉前后导
alert(parseFloat('1.234e7'));   //12340000,把科学计数法转换成普通数值

JS中NaN定义与用法相关推荐

  1. html dom createevent,js 中 document.createEvent的用法

    js 中 document.createEvent的用法 更新时间:2010年08月29日 23:22:02   作者: 用该方法创建了 Event 对象以后,必须用上表中所示的初始化方法初始化对象. ...

  2. js 中 document.createEvent的用法-转载

    js 中 document.createEvent的用法 <a class="comment-mod" οnclick="alert('ss')" hre ...

  3. js中数组定义Array

    全栈工程师开发手册 (作者:栾鹏) js系列教程1-数组操作全解 js中数组定义 js中数组的定义非常简单,包含以下5中方式.不过首先要明确的是数组是Array类型的.不是基本数据类型 代码如下: v ...

  4. js定义全局变量 vue页面_vue.js中如何定义全局变量?

    vue.js中如何定义全局变量?下面本篇文章给大家介绍一下在 Vuejs 项目中如何定义全局变量.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 在 Vuejs 项目中如何定义全局变 ...

  5. js中“||”和“”的高级用法 js,与或运算符 || 妙用

    网络上找到的一篇关于逻辑与和逻辑或的文章,详细记录一下. http://www.jb51.net/article/21339.htm 例1:用于赋值 &&:从左往右依次判断,当当前值为 ...

  6. js中 NaN、 null 及 undefined 的区别(转载)

    NaN:保留字(表明数据类型不是数字) undefined:对象属性或方法不存在,或声明了变量但从未赋值. 即当你使用了对象未定的属性或者未定义的方法时或当你声明一个变量,但你确从未对其进行赋值,便对 ...

  7. 前端开发:JS中截取字符串的用法总结

    前言 在前端开发过程中,对JS相关的字符串处理可谓是家常便饭,对字符串对处理也是前端开发过程中使用频率非常高的知识点之一,对从后台获取到的字符串进行二次处理也是非常普遍的需求,那么本文就来分享一下在前 ...

  8. JS中NaN、NULL、undefined、详解

    NaN:保留字(表明数据类型不是数字) undefined:对象属性或方法不存在,或声明了变量但从未赋值. 即当你使用了对象未定的属性或者未定义的方法时或当你声明一个变量,但你确从未对其进行赋值,便对 ...

  9. js中的extend的用法及其JS中substring与substr的区别

    1.    JS中substring与substr的区别 之前在项目中用到substring方法,因为C#中也有字符串的截取方法Substring方法,当时也没有多想就误以为这两种方法的使用时一样的. ...

最新文章

  1. 关于 ulimit -SHn 65535
  2. 刘永鑫:20分钟讲解微生物组数据分析与可视化实战
  3. kafka消息的分发与消费(一)
  4. 其实,我们需要的并不多
  5. iOS之深入解析Xcode 13正式版发布的40个新特性
  6. SuperMap GIS查询
  7. 以前计算机弹玻璃的游戏叫什么,小时候做过的游戏 你还记得多少 是否还有所保留呢...
  8. GBase 8a 报错gbase_forward_result failed to write result for client
  9. 2020软考论文想要拿高分,要避开这些坑!
  10. 阿里云0元注册域名 云服务有了免费入口
  11. javaw java_java与javaw区别
  12. 伺服舵机基础知识汇总
  13. 数据库实验3 表、ER图、索引和视图的基础操作
  14. 第十一届“蓝狐网络杯”湖南省大学生计算机程序设计竞赛 B - 大还是小? 字符串水题...
  15. xmanager 5 破解版,有需要自己下载
  16. 你做的数据运营,90%都是无用功
  17. a标签跳转的四种方法
  18. LeetCode每日一题——1758. 生成交替二进制字符串的最少操作数
  19. shell脚本:循环
  20. Problem C: 四阶多项式

热门文章

  1. C#listbox用法
  2. 「可视化搭建系统」——从设计到架构,探索前端领域技术和业务价值
  3. 定时创建生成文本文件java的一个小程序
  4. 实验吧CTF-Who are you?
  5. linux服务器odbc在哪看,在Linux上寻找odbc.ini和odbcinst.ini文件的良好文档
  6. TypeScript 类型声明书写踩坑全解析
  7. Aria2配置文件-aria2.conf
  8. 电机控制(1)直流电机的控制
  9. IPv6的TSO/GRO/GSO及其Linux实现的不妥
  10. dijkstra习题集