🉐 为什么更建议使用Number.isNaN()而不是isNaN()?

阿轩的BUG
文章191
评论56
标签101
站点日志
作者总数:1位
置顶文章:0篇
标签总数:101条
文章总数:196篇
评论总数:56条
微语总数:149条
运行天数:2311天
最近更新:2024-09-30
文章标签
最新评论
Sherlock
2025-08-21
不是应该打包成apk文件吗,怎么突然就运行编译了,下一步呢
老金er
2025-05-25
人生设计非常必要,在信息化发达的今天,周围大部分人依然只能过着人生工程模式生活,长时间生活洗礼后,尽管“人生工程”已经不再适合很多人,他们也无法做出任何改变,人生设计给我们提供了新的思路,值得尝试
赏帮赚
2025-05-25
职场太多的尔虞我诈
三笑
2024-08-16
emlog6.0.1可以升级支持吗?
pony
2024-07-08
这篇文章提供了一种新的人生规划方法——"人生设计",它借鉴了产品设计的理念,鼓励人们以创造性和探索性的方式思考和规划自己的生活。以下是对这篇文章的几个评价维度: 创新性:将产品设计的理念应用于人生规划是一个新颖的视角,为人们提供了一种跳出传统生活轨迹,探索个性化生活路径的方法。 实用性:文章不仅提出了理念,还详细介绍了具体的实施步骤,包括自我评估、制定计划、原型设计和实践选择等,具有很强的操作性。 启发性:通过强调好奇心、不断尝试、重新定义问题等心态,文章鼓励人们打破常规,勇于探索未知,这对于激发个人潜能和创造力具有积极作用。 适应性:"人生设计"理念适用于不同人生阶段和不同背景的人,无论是希望从头开始的人,还是已经取得一定成就但希望探索新方向的人,都可以从中获得启发。 情感共鸣:文章对许多人对传统生活轨迹的不满和对改变的渴望进行了深刻的洞察,能够引起读者的共鸣。 可持续性:人生设计强调的是一个持续迭代和试错的过程,这与现实生活的发展规律相吻合,有助于人们在不断变化的环境中做出适应性调整。 教育意义:作为一种人生规划方法,"人生设计"可以作为教育的一部分,帮助年轻人更早地学会自我探索和规划,为未来的生活和职业发展打下基础。 局限性:尽管"人生设计"提供了一种新的思考框架,但它可能需要个人具备一定的自我认知和反思能力,对于一些缺乏自我探索经验的人来说,可能需要额外的指导和支持。 总体来说,这篇文章提供了一种有价值的人生规划方法,对于那些渴望改变、寻求个性化生活的人来说,是一种有益的参考和指导。
首页值得一看 🔍️

前言

最近在项目代码中,发现了有人使用Number.isNaN()这个方法,也有人使用isNaN()这个方法,本着少一事不如多一事的原则,仔细探究了下这两个方法的区别之处。

阅读本文,你将学到:

1. isNaN()的用法
2. Number.isNaN()的用法
3. isNaN()和Number.isNaN()的区别
4. 为什么更推荐使用Number.isNaN()?

1. isNaN()

isNaN函数是用来确定一个值是否是NaN,可以在全局直接使用,返回值是一个布尔值truefalse

// 基础用法
isNaN(1)     // false
isNaN(NaN)   // true

但是isNaN方法有一些怪异的行为,不然也不会有Number.isNaN函数什么事了:

isNaN(undefined); // true
isNaN({});        // true
isNaN("37,5")     // true
isNaN("123ABC")   // true
isNaN("abc")      // true

可以看到,以上的这些isNaN函数的参数都不是NaN,怎么还返回true呢?
MDN的解释是这样的:如果isNaN函数的参数不是Number类型, isNaN函数会首先尝试将这个参数转换为数值,然后才会对转换后的结果是否是NaN进行判断, 也就是说,isNaN的参数首先会执行Number()进行强制转换,然后再去判断是否是NaN:

isNaN(true)       // false 因为Number(true)值为1,而1不是NaN, 所以返回false
isNaN(undefined); // true  因为Number(undefined)值为NaN, 所以返回true
isNaN({});        // true  因为Number({})值为NaN, 所以返回true
isNaN('abc');     // true  因为Number(abc)值为NaN, 所以返回true
isNaN('');        // false 因为Number('')值为0, 所以返回false

2. Number.isNaN()

Number.isNaN() 方法确定传递的值是否为 NaN,并且检查其类型是否为 Number,它的返回值是布尔类型。它是原来的全局 isNaN()的更稳妥的版本(注意:ECMAScript 2015版本才有Number.isNaN())。

也就是说,Number.isNaN函数会先检查参数是不是Number类型,如果不是,直接会返回false,只有参数是Number类型才会去判断是不是NaN,我们用Number.isNaN再验证下之前的例子:

// 基本使用
Number.isNaN(NaN)    // true
Number.isNaN(1)      // false

// 特殊情况
Number.isNaN(true)        // false 因为true不是Number类型
Number.isNaN(undefined)   // false 因为undefined不是Number类型
Number.isNaN({})          // false 因为{}不是Number类型
Number.isNaN("abc")       // false 因为"abc"不是Number类型
Number.isNaN("")          // false 因为""不是Number类型

3. 推荐使用Number.isNaN()

通过上述的几个例子可以看到,Number.isNaN用来判断某个值是否是NaN更像是我们理想型用法,不会产生一些比较怪异的行为,使我们的代码更加的严谨,防止出现bug, 所以在写代码的时候更推荐使用Number.isNaN这个方法来确定一个值是否是NaN

上一篇
❓️ MySQL 如何优化慢查询?
下一篇
🏫 史上最全 Vue 前端代码风格指南