在JavaScript当中,为什么NaN===NaN和NaN==NaN返回false?

news2024/11/15 11:46:24

作者:CSDN-PleaSure乐事

欢迎大家阅读我的博客 希望大家喜欢

使用环境:vscode chrome

今天这个话题的缘由是早上和一位同专业的学长聊天,他在公司完成了一个项目,项目当中有一个40个字段的返回值,于是牵扯到了某道他遇到的面试题,其中是需要用js找到某个数组当中null的索引,然后他问了我这样一个问题:你觉得NaN===NaN吗?当时我回答了不等于,然后他又追问为什么,我回答不出。于是就有了今天这篇文章,希望能与大家分享。


目录

1.什么是NaN?

1.1定义

1.2特点

1.2.1不等于任何值

1.2.2不可比较性

1.2.3类型为number

1.3如何判断NaN

1.3.1使用isNaN()

1.3.2使用 Number.isNaN()

2.双等号和三等号为什么返回false

3.拓展——NaN和Null的区别

3.1类型差异

3.2含义差异

3.3相等性

3.4检测方法


首先我们从NaN的定义开始。如果有需要,可以直接从第二大点开始看。

1.什么是NaN?

1.1定义

在JavaScript中,NaN 是一个特殊的浮点数值,表示一个未定义或不可表示的结果。例如,当一个数学运算无法产生有效结果时,就会返回 NaN。

<script type = "text/javascript">
    console.log(0 / 0);
    console.log('foo' * 2);
</script>

1.2特点

1.2.1不等于任何值

包括自身在内,NaN 不等于任何值,即 NaN !== NaN

1.2.2不可比较性

NaN 不能与其他数值进行比较,即 NaN < 5NaN > 5 都会返回 false

1.2.3类型为number

尽管NaN表示“不是一个数”,但实际上它的类型仍然是number

1.3如何判断NaN

1.3.1使用isNaN()

isNaN() 函数可以用来检测一个值是否为 NaN。需要注意的是,isNaN() 会先尝试将其参数转换为一个数字,然后判断转换后的值是否为 NaN。

<script type = "text/javascript">
    console.log(isNaN(NaN));  // true
    console.log(isNaN('NaN'));  // false, 因为 'NaN' 被转换成了 number 型
    console.log(isNaN('123abc'));  // true, 因为 '123abc' 被转换成了 NaN
</script>

1.3.2使用 Number.isNaN()

从ES6(ECMAScript 2015)开始,推荐使用 Number.isNaN() 函数。这个函数只接受一个 number 类型的参数,并且不会进行类型转换。

<script type = "text/javascript">
    console.log(Number.isNaN(NaN));  // true
    console.log(Number.isNaN('NaN'));  // false, 因为 'NaN' 不是 number 类型
    console.log(Number.isNaN(123));  // false
</script>

​​​​​​​


那么对于==和===,为什么会返回false呢?

2.双等号和三等号为什么返回false

在JavaScript中,使用双等号 (==) 进行比较时,会进行类型转换,使两边的值能够进行比较。然而,对于 NaN,即使使用双等号 (==) 进行比较,结果仍然是 false。

这是基于IEEE 754浮点数标准的规定,该标准规定 NaN 与任何值都不相等,包括 NaN 自身。这种设计是为了确保在处理数学运算的不确定结果时,可以有一种明确的方式来识别这种不确定性。

同样的,根据ECMAScript规范,NaN 与任何值都不相等,包括自身。这意味着即使是使用全等比较 (===),NaN 也不会等于 NaN。这是因为 NaN 的定义就是“不是一个数”,因此即使两个表达式都产生了 NaN,它们也被认为是不相等的。

3.拓展——NaN和Null的区别

NaN 是一个特殊的数值,代表“不是一个数”(Not-a-Number)。它通常是在数学运算无法得出有意义的结果时产生的。

null 是一个基本类型的值,表示没有任何对象值。它常用来表示一个变量尚未被赋值的情况,或者说它没有指向任何对象。

他们在以下四个方面区别较大:

3.1类型差异

NaN 是一个 Number 类型的值。而null 是一个基本类型的值,尽管 typeof null 返回 'object'。

3.2含义差异

NaN 表示一个数学上的未定义或非法结果。而null 用来表示一个变量没有指向任何对象或值。

3.3相等性

NaN 与任何值都不相等,包括自身。即 NaN !== NaN。但是null 与自身相等,即 null === null。

3.4检测方法

NaN 可以通过 isNaN() 或 Number.isNaN() 来检测。null 可以直接通过 === null 来检测。


作者:CSDN-PleaSure乐事

希望我的博客对您有帮助,也希望在对您有帮助时您可以为我留下点赞收藏与关注,这对我真的很重要,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2110064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法练习题14——leetcode84柱形图中最大的矩形(单调栈)

题目描述&#xff1a; 解题思路&#xff1a; 要解决这个问题&#xff0c;我们需要找到每个柱子可以扩展的最大左右边界&#xff0c;然后计算以每个柱子为高度的最大矩形面积。 具体步骤如下&#xff1a; 计算每个柱子左侧最近的比当前柱子矮的位置&#xff1a; 使用一个单调…

MATLAB实现PID参数自动整定

目录 1、项目说明 2、文件说明 1、项目说明 本项目旨在通过 MATLAB 语言实现 PID 参数的自动整定&#xff0c;并设计了一个直观易用的 GUI 界面。该系统特别适用于实验室环境下的 PID 参数自整定任务。整定的核心原则在于优化系统性能&#xff0c;使系统的衰减比尽可能接近理…

R-Adapter:零样本模型微调新突破,提升鲁棒性与泛化能力 | ECCV 2024

大规模图像-文本预训练模型实现了零样本分类&#xff0c;并在不同数据分布下提供了一致的准确性。然而&#xff0c;这些模型在下游任务中通常需要微调优化&#xff0c;这会降低对于超出分布范围的数据的泛化能力&#xff0c;并需要大量的计算资源。论文提出新颖的Robust Adapte…

linux————根据端口查找运行目录的三种方法

先查询端口找到进程 netstat -anlpt | grep 16443 | grep -v grep tcp 0 0 0.0.0.0:16443 0.0.0.0:* LISTEN 3710563/nginx: mast tcp 0 0 192.168.110.253:16443 192.168.110.22:64430 ESTABLISHED 3710580/n…

When can I expect multiple “choices“ in an OpenAI response?

题意&#xff1a;"什么时候我可以在 OpenAI 的回复中预期到多个“选择”&#xff1f;" 问题背景&#xff1a; For a simple OpenAI api call in python 对于一个在 python 中简单的 OpenAI API 调用 response openai.ChatCompletion.create(model"gpt-4&quo…

vue2+ueditor集成秀米编辑器

一、百度富文本编辑器 1.首先下载 百度富文本编辑器 下载地址:GitHub - fex-team/ueditor: rich text 富文本编辑器 2.把下载好的文件整理好 放在图片目录下 3. 安装插件vue-ueditor-wrap npm install vue-ueditor-wrap 4.在你所需要展示的页面 引入vue-ueditor-wrap 此时…

苹果电脑需要安装杀毒软件吗?探索Mac的安全世界!

在聊到电脑安全时&#xff0c;许多Mac用户都骄傲地声称&#xff1a;“我的Mac是不会中病毒的&#xff01;”确实&#xff0c;与Windows PC相比&#xff0c;Mac因其UNIX-based的操作系统构架&#xff0c;天生就更加安全。但这是否意味着Mac完全不需要杀毒软件呢&#xff1f;让我…

细胞因子系列

细胞因子是一类分泌性蛋白质&#xff0c;可以调控细胞之间的相互作用以及免疫反应等生物学过程。细胞因子在细胞信号传导、细胞生长、细胞分化和细胞凋亡等过程中起着重要作用。它们可以通过在细胞表面结合受体、介导细胞信号转导&#xff0c;从而调节免疫应答、细胞增殖和炎症…

Oracle RAC环境NBU异机恢复

一、故障原因 9月3日中午&#xff0c;主机运维人员误操作&#xff0c;对sydb数据库的ASM磁盘做了格式化&#xff0c;将三块共享磁盘做了分区&#xff0c;然后使用vgextend命令加入到本地文件系&#xff0c;造成sydb的两个实例异常&#xff0c;没有操作CRS磁盘&#xff0c;所以…

如何在IDEA的一个工程中创建多个项目?

在IDEA中&#xff0c;可以通过Module来创建新的工程。

仕考网:公务员考试资格审核时间是多久?

在国家公务员考试的报名过程中&#xff0c;考生完成信息填报并选定职位之后&#xff0c;资格审核结果将在提交后48小时内在报名信息页面公布。一般是从报名日次日上午8点开始&#xff0c;直至报名截止日次日18点结束。在此期间&#xff0c;考生可以通过国家公务员局的官方网站查…

8.分布式服务部署

文章目录 1.分布式服务部署1.1服务器个数1.2 ubuntu 的 MySQL 安装1.3对其他服务器授权1.4Java服务部署1.5常见问题 大家好&#xff0c;我是晓星航。今天为大家带来的是 分布式服务部署 相关的讲解&#xff01;&#x1f600; 1.分布式服务部署 1.1服务器个数 机器个数 1 - N…

Unity实战之滑动列表居中的放大其他的缩小功能

前言 最近项目需要做一个关卡选择列表,滑动到屏幕中间,代表该关卡被选中,展示选中状态。 预期效果 思路 使用3个父节点(左中右)用于挂载关卡item,通过改变关卡item的父节点来改变item的层级。 创建ui 创建父节点 首先创建一个空节点,命名为levelGroup,代表该节点…

硬刚苹果还得是华为

文&#xff5c;琥珀食酒社 作者 | 璇子 牛皮啊 华为发三折叠不意外 意外的是 这各种翻转简直颠覆想象 市面上没见过这么能“翻转”的&#xff1f; 要不怎么说硬刚苹果 还得看华为 就跟你同天怎么了&#xff1f; 拼创新、拼技术、拼热度 你就说哪比你差吧&#xff1f…

并联电容器后实际输出容量怎么测

要测量并联电容器后的实际输出容量&#xff0c;可以按照以下步骤进行&#xff1a; 1. 准备工作 断电安全&#xff1a;在进行任何测量之前&#xff0c;确保电容器和相关设备已经断电&#xff0c;以确保安全。检查设备&#xff1a;确保所有测量设备和仪器&#xff08;如电容表、…

微信小程序实践案例

参考视频&#xff1a; https://www.bilibili.com/video/BV1834y1676P/?p36&spm_id_frompageDriver&vd_sourceb604c19516c17da30b6b1abb6c4e7ec0 前期准备 1、新建三个页面 "pages": ["pages/home/home","pages/message/message",&quo…

提升竞争力:优化多门店网络的方法

新型门店网络通过先进技术和架构&#xff0c;实现高效、安全的数据传输&#xff0c;优化业务流程&#xff0c;从而提升零售企业的运营效率和客户体验。核心组成包括扁平化网络架构、强大的无线覆盖及安全措施。随着AI和5G的推进&#xff0c;未来门店网络将不断创新&#xff0c;…

完整指南:CNStream流处理多路并发框架适配到NVIDIA Jetson Orin (三) 代码编译、各种问题解决、代码修改

目录 1 infer_server编译 1.1 infer_server/CMakeLists.txt修改 1.2 FindLibCompute.cmake编写 1.2 findLibCVCuda.cmake编写 1.3 ./3rdparty/config_lib_aarch64.sh修改 1.4 解决各种编译错误 1.4.1 /usr/include/c/11/bits/algorithmfwd.h:259:5: error: ‘pair’ doe…

最值得信赖的10款电脑监控软件推荐

随着信息时代的飞速发展&#xff0c;电脑监控软件在企业管理、家庭安全以及个人隐私保护等多个领域中发挥了重要作用。选择一款功能强大且值得信赖的电脑监控软件&#xff0c;能够帮助用户实现对电脑使用情况的全面监控&#xff0c;保障数据安全并提高工作效率。本文将为您推荐…

FPGA随记——OSERDESE2和IERDESE2

http://t.csdnimg.cn/yNvxf---看这个篇吧 这个挺好的 OSERDESE2 模块要求复位信号高电平有效&#xff0c;并且 需要将异步复位信号同步到串行时钟域。 除了用原语调用&#xff0c;还可以用High Speed SelectIO Wizard这个IP 进行调用 针对具体select IO这个IP的使用和介绍&…