作者: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 < 5
或 NaN > 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乐事
希望我的博客对您有帮助,也希望在对您有帮助时您可以为我留下点赞收藏与关注,这对我真的很重要,谢谢!