什么是NaN?

对于NaN的定义,这里表达一下个人的理解:由于数学运算的返回结果(或者说其中有操作数不是数字类型导致返回的无效数字),不是一个有效的数字。但是这个结果仍然是数字类型,只是因为执行数学运算没有成功,返回一个失败的结果。

demo:

var a = "str";
var b = 2;
var c = a/b;console.log(c);            // NaN
console.log(typeof c);     // number

用上面这个例子,来验证我个人对NaN定义的理解。首先a和b进行除法运算,由于a是字符串类型和数字类型b,这样的情况是无法得到一个有效数字的。所以变量c的值是一个NaN,而c的数据类型却是number。

ps:不要把NaN想象为:不是一个数字(not a number),因为这样仅仅是NaN的“一半”。

如何判断一个变量是不是NaN?

从上面的定义我们已经知道了什么是NaN,那么哪些值是NaN呢?按照上面所说的那样,可以想到NaN首先应该是一个数学运算的结果,而并非一个直接定义的变量或者常量。

对于判断一个变量是否为NaN,可能很多人会想到isNaN这个方法,那我们就来一个demo看看这个方法判断的到底准不准确。还是上面那个demo吧:

var a = "str";
var b = 2;
var c = a/b;console.log(isNaN(a));    // true
console.log(isNaN(b));    // false
console.log(isNaN(c));    // true

这个例子中,a的结果是true,b是false,c是true。对于isNaN来说,它是判断一个值是不是NaN,如果是则返回true。但是a是一个字符串,并不是一个NaN(因为不符合NaN的条件:不是一个数字且数据类型为number)。但为什么isNaN判断这个变量a的时候还是会返回true呢?这也是一个bug,并且已经存在很久了(据说至今已超过19年)。所以判断一个变量是否为NaN不能使用isNaN()这个方法,下面给大家介绍另外4个方法。

1、根据NaN的定义,判断参数的类型加上isNaN方法。

var a = "str";
var b = 2;
var c = a/b;function isNaN(n) {if(typeof n === "number" && isNaN(n)) {return true;} else {return false;}
}
console.log(Number.isNaN(a));  // false
console.log(Number.isNaN(b));  // false
console.log(Number.isNaN(c));  // true

2、第一个方法的改良,防止在老版本的浏览器不支持isNaN方法。

var a = "str";
var b = 2;
var c = a/b;if(!Number.isNaN) {Number.isNaN = function(n) {return( typeof n === "number" && window.isNaN(n));}
}
console.log(Number.isNaN(a));  // false
console.log(Number.isNaN(b));  // false
console.log(Number.isNaN(c));  // true

3、利用NaN是唯一一个不等于任何自身的特点。

var a = "str";
var b = 2;
var c = a/b;function isNaN(n) {if(n !== n) {return true;} else {return false;}
}
console.log(isNaN(a));  // false
console.log(isNaN(b));  // false
console.log(isNaN(c));  // true

4、利用ES6中提供的Object.is()方法。

var a = "str";
var b = 2;
var c = a/b;console.log(Object.is(a, NaN));    // false
console.log(Object.is(b, NaN));    // false
console.log(Object.is(c, NaN));    // true

js的NaN和isNaN相关推荐

  1. JS的NaN与isNaN

    1.定义 NaN 属性是代表非数字值的特殊值 NaN 属性是代表非数字值的特殊值.该属性用于指示某个值不是数字.可以把 Number 对象设置为该值,来指示其不是数字值. isNaN() 函数用于检查 ...

  2. JS如何准确判断NaN(isNaN函数不可靠问题)

    JS如何准确判断NaN(isNaN函数不可靠问题) 使用isNaN()判断一个变量是否为NaN踩了个坑. undefined也能够通过isNaN()的判断,难道我还要在判断一下是否为undefined ...

  3. JS中NaN的认识与ISNaN函数的使用

    NaN & ISNaN 在JS中,NaN用来表示一个非数字的特殊值,当发现无法进行运算时,js不会报错,而是会返回一个NaN NaN的注意事项: NaN为number类型,但NaN表示一个非数 ...

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

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

  5. JavaScript中的 NaN 与 isNaN

    NaN NaN 即 Not a Number ,不是一个数字. 在 JavaScript 中,整数和浮点数都统称为 Number 类型 .除此之外,Number 类型还有一个很特殊的值,即 NaN . ...

  6. JS中NaN定义与用法

    NaN,即非数值(Not a Number)是一个特殊的值,这个数值表示本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了).比如在其他语言中 任何数值除以0都会导致错误而终止程序执行.但是 ...

  7. JavaScript(JS) Number.NaN

    Number对象表示数字日期,可以是整数也可以是浮点数.通常,不需要担心Number对象,因为浏览器会自动将Number字面量转换为Number类的实例.本文主要介绍JavaScript(JS) Nu ...

  8. JS中的NaN和isNaN,简直是双重人格?

     number数字类型 包括数字和NaN,NaN:not a number 但是它是数字类型的 isNaN的用法:检测当前值是否不是有效数字,返回true代表不是有效数字,返回false是有效数字 / ...

  9. JS中的NaN和isNaN

    文章目录 一.NaN:not a number 不是个数字的数字类型 但是属于数字类型 特性:1.NaN是假的布尔值 2.NaN与自己都不相等 二.isNaN is not a number 是不是不 ...

最新文章

  1. vj p1042捕风捉影 题解
  2. 当你装不上Python外部包时,试试这个网站
  3. 中医 西班牙语 PHP,php – MySql西班牙语字符数据
  4. Python脚本做接口测试,抛弃接口测试工具是否可行?(一)
  5. wpf 图片绝对路径引用_Python Pillow 图片处理
  6. Jenkins+GitLab+Docker+SpringCloud+Kubernetes实现可持续自动化微服务
  7. android 坚挺通话广播_关于短信黑名单 BroadCast
  8. python123第九周测验答案2020_2020知到答案 大数据分析的python基础 最新智慧树满分章节测试答案...
  9. HTML5 Notification实现浏览器通知
  10. Echarts Map地图下钻至县级
  11. 卷积神经网络之“浅层特征”与“深层特征”
  12. Linux 管道通信
  13. 6月26日日志-消费记录界面实现
  14. 水文分析与计算——年均流量趋势检验(Mann-Kendall法、线性回归法)
  15. halcon变量,图像与C++的一些转换(未完待续)
  16. 2017年深度学习必读31篇论文(附论文下载地址)
  17. ERP系统模块完全解析──主生产计划MPS
  18. 一个小白的转行自学Python的经历
  19. 【SpringCloud技术专题】「Hystrix」(9)熔断器的原理和实现机制
  20. SKY19225-001单刀四掷(SP4T)开关设计

热门文章

  1. ubuntu16 安装文本对比软件
  2. mapbox加载天地图
  3. Win10系统QQ无法登陆,代码00001
  4. Python与金融:为什么将Python用于金融
  5. 华为S5700三层交换机不同VLAN互通
  6. 10月25日 c语言 打印所有水仙花数
  7. 传世基本架构-客户端(全局变量与总体执行流程)
  8. 生命的意義在你的内心
  9. 户籍管理系统的设计与实现(论文+PPT+源码)
  10. 注重移动端体验,新商云带你开启社交电商新时代