JavaScript 中,value一共有七种type
null,undefined,boolean,number,string,object,symbol(ES6新增),以下为isNaN与Number.isNaN的输出结果:

//isNaN
console.log(isNaN(null));            //false
console.log(isNaN(true));            //false
console.log(isNaN(false));           //false
console.log(isNaN(0));               //false
console.log(isNaN(undefined));       //true
console.log(isNaN("AB"));            //true
console.log(isNaN({a: 1}));          //true
console.log(isNaN(NaN));             //true//Number.isNaN
console.log(Number.isNaN(null));      //false
console.log(Number.isNaN(true));      //false
console.log(Number.isNaN(false));     //false
console.log(Number.isNaN(0));         //false
console.log(Number.isNaN(undefined)); //false
console.log(Number.isNaN("AB"));      //false
console.log(Number.isNaN({a: 1}));    //false
console.log(Number.isNaN(NaN));       //true

console.log(typeof NaN); //number
console.log(NaN == NaN); //false 为什么?
NaN MDN: The global NaN property is a value representing Not-A-Number.
意思是是说:NaN是一个放在 global(浏览器里是window)对象里的一个value,是一个代表Not-A-Number的value.
所以NaN是一个 value, 这个 value 的 type 是 number。

解释来自JavaScript权威指:value, type, variable
值value:就是计算机运行时操作的一些数据对象
数据类型type:就是计算机表示并能操作的值的类型
变量variable:一个值的符号名称,当程序需要将值保存起来备用时,就将值赋给一个变量即:
variable是存放value的容器,而value是有type概念的,容器variable是没有type的概念的。
example:var ynqc = 'Ella'; 容器 variable ynqc 装着 value 'Ella', value 'Ella' 的type是string

所以,我们用isNaN()来判断一个value是不是NaN了。但是:

isNaN("AB");      // true
isNaN(undefined); // true
isNaN({});        // true

很明显不是 NaN 的 value 也被误判成 NaN 了。

于是 ES6 为了弥补这一BUG引入了 Number.isNaN().

Number.isNaN(NaN);         // true
Number.isNaN("AB");        // false
Number.isNaN(undefined);   // false
Number.isNaN({});    // false

Number.isNaN() 的 polyfill

if (!Number.isNaN) {Number.isNaN = function(n) {return typeof n === "number" && window.isNaN( n );};
}
简单的实现,利用只有 NaN 不跟自己相等的特性
if (!Number.isNaN) {Number.isNaN = function(n) {return  return value !== value;};
}

Number.isNaN 与 isNaN 的区别相关推荐

  1. isnan java_从 Number.isNaN 与 isNaN 的区别说起 例子

    例子 大家先看一看下面这个例子, isNaN(NaN); isNaN('A String'); isNaN(undefined); isNaN({}); Number.isNaN(NaN); Numb ...

  2. isNaN()与Number.isNaN()的区别

    1.isNaN() isNaN函数是用来确定一个值是否是NaN,可以在全局使用,返回值是一个布尔值true或false: //基础用法 isNaN(1) //false isNaN(NaN) //tr ...

  3. 小程序中输入框input的type属性 text、number、idcard、digit 区别

    微信小程序的 input 有个属性叫 type,这个 type 有几个可选值: text:不必解释 number:数字键盘(无小数点) idcard:数字键盘(无小数点.有个 X 键) digit:数 ...

  4. 微信小程序 input 的 type属性 text、number、idcard、digit 区别

    微信小程序的 input 有个属性叫 type,这个 type 有几个可选值: text:不必解释 number:数字键盘(无小数点) idcard:数字键盘(无小数点.有个 X 键) digit:数 ...

  5. type=number和type=tel的区别

    众所周知,HTML5加入了新的input类型 number,这是方便数量输入的.如果是在移动端中,属性type="number"和type="tel"会唤起系统 ...

  6. 检测数据类型、小数点后保留后N位方法、数据类型转换、window对象的方法 、分支结构 (if单分支、if-else 双分支、多重if结构)isNaN() 与 Number.isN的区别

    目录 1.检测数据类型(typeof) 2.数据类型转换 转换为字符串类型 换为数字类型 其他类型转换为布尔值 小数点后保留后N位方法 3.window对象的方法 (window.可省略) 4.顺序流 ...

  7. js中isNaN和Number.isNaN的区别

    背景 与 JavaScript 中其他的值不同,NaN不能通过相等操作符(== 和 ===)来判断 ,因为 NaN == NaN 和 NaN === NaN 都会返回 false. 因此,isNaN ...

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

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

  9. isNaN与parseInt/parseFloat

    isNaN 返回一个 Boolean 值,指明提供的值是否是保留值 NaN (不是数字). NaN 即 Not a Number isNaN(numValue) 必选项 numvalue 参数为要检查 ...

最新文章

  1. 独家|OpenCV1.9 如何利用OpenCV的parallel_for_并行化代码(附代码)
  2. WF4.0进行单元测试
  3. python发送文件到邮箱_python发送文件夹内容到邮箱
  4. 开发日记-20190914 关键词 汇编语言王爽版 第五章
  5. 创建两个相同名称的文件夹
  6. sql中的case when
  7. MSDN i TELL YOU 又更新了,win10 1809版本的 3月29日的
  8. pycharm创建django项目界面解释
  9. NetBeans Weeldy News 刊号 # 53 - Apr 23, 2009
  10. initramfs 根文件系统
  11. 找不到服务器的打印机,在服务器上找不到打印机无法连接怎么解决
  12. 苹果文件管理器服务器,8最佳免费iPhone文件管理器,用于管理iOS设备上的文件...
  13. 网络数据传输的节点大全
  14. PowerDesigner 15破解版下载
  15. 儿童护眼灯有必要买吗?推荐教育部入围护眼照明品牌
  16. 微信小程序提交审核时提示:“ 小程序页面内容涉及账户充值服务,需补充商家自营-预付卡销售-发行方类目。请在基础信息处申请该类目”的解决方法
  17. ES6 数组转为对象 ,以及 find 在数组里面找到对应一条数据
  18. java 设计模式之解释器模式(十九)
  19. 区块链福利(注册即可)
  20. kubernetes认证-CKA、CKS考试

热门文章

  1. 2021年PMP考试时间安排
  2. SAP 通过SPRO激活扩展BC集失败
  3. window7 thinkpad E430C怎么关闭FN的快捷键 thinkpad系列win7通用
  4. HMS Core助力宝宝巴士为全球开发者展现高品质儿童数字内容
  5. 计算机上绘图教程,word绘图教程:绘图工具中的“线条”工具使用-word技巧-电脑技巧收藏家...
  6. HBase MOB简介以及使用
  7. 将图片进行黑白灰处理
  8. kubernetes CSI(上)
  9. 编写 Java 程序用于显示人的姓名和年龄。
  10. Mobileye专利 US9665100 - Sparse map for autonomous vehicle navigation 吐血整理