不知道这个小知识点用得多不多,曾经在书上看到过,所以有一些印象,前段时间顺手写出类似如下的代码

var result;
if (parseInt('abc')==NaN) {return "相等";
} else {return "不等";
}

断点调试之后发现无论如何都不相等,方法parseInt()返回的结果确实是NaN,但是与右侧的NaN比较返回的结果却是false,这时候才突然想起来NaN有不等于自身的特性,所以简单收集一下资料做个整理

原因

了解原因之前我们先明确一个问题,什么时候回出现NaN,理论上来说有两种情况

  • 表达式计算
  • 类型转换

我们逐个分析

表达式计算

当运算中使用了 + - * / 等运算符的时候,js会自动进行转换,讲参与计算的变量转换成js的基本类型之一的Number类型,如果转换失败就会返回NaN。比如说:

console.log(12 + 'a'); //NaN

类型转换

比较典型的就是最初的例子里使用的parseInt(),除此之外还有parseFloat()和Number(),传入一个非数变量结果就是NaN,很好理解,顺便一提parse系列方法与Number()有些不同。

parseInt('123abc'); // 123
Number('123abc'); // NaN

总结

从上面两种产生NaN的情况来看,NaN是一种异常的结果,也就是“not a number”,虽然它也是一个变量,但它是描述性变量,'a'不是一个数字(not a number),'b'也不是一个数字(not a number),但是'a'和'b'并不相等,所以NaN != NaN也就成立了。

Js中NaN不等于NaN相关推荐

  1. js NaN不等于NaN

    NaN代表非数字值的特殊值.该属性用于指示某个值不是数字. 这个非数字可以是不同的数字,因此 NaN 不等于 NaN. NaN == NaN // false

  2. js中的NaN并不等于NaN

    在js中,object===object并没有任何问题,但js中的NaN===NaN返回的却是false,这是为什么呢? 因为NaN是Not a Number的缩写,即不是一个数字.如,A不是一个数字 ...

  3. 详解js中的undefined、NaN、null

    js中三大特殊的值: undefined NaN null 1.undefined 变量声明了但为赋值 console.log(typeof undefined); //undefined conso ...

  4. js中 ‘ ‘==0 为什么等于true?

    在javascript中,双等号 == 比较不同类型的值时,会先转换,再比较其内容, ' ' 转换为false,false会转换成0,0等于0, 故为true. (在JavaScript中,非 0 都 ...

  5. js中判断一个变量是否为NaN

    定义 NaN(不是一个数字,但数据类型为number)是执行数学运算没有成功,返回失败的结果. 另外,NaN 不等于 NaN . 判断方法 利用 NaN 是唯一一个不等于自身的特点 function ...

  6. java 判断 nan_关于java:如何测试double是否等于NaN?

    我在Java中有一个double,我想检查它是否为NaN. 做这个的最好方式是什么? 使用静态Double.isNaN(double)方法,或Double的.isNaN()方法. // 1. stat ...

  7. JS比较运算符之等于与不等于详解

    [align=center]JS比较运算符之等于与不等于详解[/align] [b]1.1等于(==)与不等于(!=)[/b] 使用==或!=来比较两个数据是否相等,如果两个数据的类型不同,将进行转换 ...

  8. JS中的==和===的区别

    简单来说: == 代表相同, ===代表严格相同. 这么理解: 当==进行比较时候: 先检查两个操作数数据类型,如果相同, 则进行===比较, 如果不同, 则进行一次类型转换, 转换成相同类型后再进行 ...

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

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

最新文章

  1. 在k8s中使用gradle构建java web项目镜像Dockerfile
  2. csdn文章保存到本地pdf
  3. 126.数据链路层有哪些协议?
  4. 教你如何区分描述统计学与推断统计学
  5. Java Web学习(五)session、cookie、token
  6. LG新能源新设首席数字官 首任是英伟达前数据科学家
  7. 如何下载vSphere Big Data Extensions 1.0免费试用版
  8. 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1](简单易懂)
  9. 《决战大数据大数据的关键思考 升级版》PDF电子书分享
  10. Readline-5.2交叉编译——fileman移植
  11. 阿里巴巴宣布5.4亿战略投资中国万网==互联网电子商务绑定互联网基础服务为手机电子商务开拓铺路...
  12. 奶瓶(beini) 又一蹭网神器 1.2.2增强版带600万密码字典
  13. 东芝和摩飞多功能锅到底哪一款值得拔草呢?本篇深度评测让你剁手不后悔;
  14. pdf怎么插入页码步骤介绍
  15. 使用KOG数据库进行注释
  16. 《Java程序设计》第三周学习总结
  17. 网络舆情信息工作怎么做的措施及建议
  18. intel realsense获取8位深度图
  19. 银行软开入职一周年分享
  20. 七个人生工具SWOT、PDCA、6W2H、SMART、WBS、时间管理、二八原则——送给自己

热门文章

  1. python搭建ip池
  2. CSTrack: Rethinking the competition between detection and ReID in Multi-Object Tracking
  3. LayaBox 游戏文字提示
  4. Uncaught (in promise) 问题探究
  5. sql查询字段不等于某值,会忽略该字段为null的数据
  6. 计算机存储单位字的英语,谈一谈计算机存储单位字节与字符
  7. Android实际开发bug大总结
  8. An Empirical Evaluation of Generic Convolutional and Recurrent Networks(中文版+注释)(时序预测)(TCN时域卷积网络)
  9. 牛客VL7 求两个数的差值
  10. 网格半边结构(Half edge mesh)