关于NaN除了表示Not a Number外你还知道什么

前言

NaN我们都知道是not a number的意思,但是除此之外你真的了解NaN吗?在这里我们来系统的说一下NaN身上的特点和一些面试中可能会考到的地方。

NaN

首先NaN是Not a Number的缩写,他是一个特殊的Number值,这点尤其注意+

js 复制代码
console.log(typeof NaN === "number");  // logs "true"

一般在应当返回一个number而没有返回一个number类型的值的时候就会返回一个NaN。在MDN上说有5种情况会返回一个NaN

  • 失败的数字转换(例如,显式转换,如 parseInt("blabla")Number(undefined),或隐式转换,如 Math.abs(undefined)
  • 计算结果不是实数的数学运算(例如,Math.sqrt(-1)
  • 不定式(例如,0 * Infinity1 ** InfinityInfinity / InfinityInfinity - Infinity
  • 一个操作数被强制转换为 NaN 的方法或表达式(例如,7 ** NaN7 * "blabla")------这意味着 NaN 具有传染性
  • 将无效值表示为数字的其他情况(例如,无效的 Date new Date("blabla").getTime()"".charCodeAt(1)

另外有几种情况要特别说一下,

js 复制代码
console.log(5/0);  // logs Infinity
console.log(-5/0);  // logs -Infinity
console.log(0/0);  // logs NaN
  1. NaN和任何值相加都等于NaN(undefined和null以及它本身都是返回NaN)
  2. NaN和任何值都不相等,包括他自己console.log(NaN === NaN); // logs false

如何判断一个NaN

  1. isNaN()
  2. Number.isNaN()
  3. value !== value 判断NaN大致就是这三种办法,首先第一个isNaN,它会将值先转换成Number类型,如果能够转换成数字则为false,否则为true
js 复制代码
console.log(isNaN('2'));  // logs false
console.log(isNaN(NaN));  // logs true
console.log(isNaN('a'));  // logs true  字符a无法转换为数字

接着Number.isNaN()他是不会对值进行一个转换的,他会直接判断该值是否是NaN。

js 复制代码
console.log(Number.isNaN('2'));  // logs true
console.log(Number.isNaN(NaN));  // logs true
console.log(Number.isNaN('a'));  // logs true 

最后是value !== value,这个很明显吧,就是利用了NaN身上他和任何值都不相等的特性,当value !== value的时候那这个值肯定就是NaN了。

尾声

有时候这种简单的知识点容易被忽略,其中能被深挖的东西也是有的。现在大厂感觉都特别喜欢考原生js,这种东西又恰恰是很需要积累的,原生js中有着各种各样的小细节都能被拿出来考,十分建议大家都去写写各种各样的手写题,对你原生js的提升是很明显的。

相关推荐
郭老二4 小时前
【前端】vue3:编译步骤
前端
不在逃避q4 小时前
Trae/Vs Code/Cursor命令行无法跑npm命令
前端·arcgis·npm
夏殇之殁5 小时前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
The Chosen One9855 小时前
高进度算法模板速记(待完善)
java·前端·算法
陈随易5 小时前
MoonBit抓包模块pcap,查看电脑的每一次联网通信
前端·后端·程序员
新中地GIS开发老师6 小时前
WebGIS开发学生作品|低空航天管理与航线规划系统
前端·javascript·webgis·三维gis开发
用户059540174466 小时前
大模型对话记忆持久化踩坑实录:用 Playwright 自动化测了 300 次,终于揪出会话丢失的真凶
前端·css
丙氨酸長鏈6 小时前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库
kyriewen7 小时前
面试官让我手写虚拟列表——AI生成的版本,快速滚动几下就白屏了
前端·javascript·面试
IT_陈寒7 小时前
Vite热更新失效?你可能漏了这个配置
前端·人工智能·后端