NaN不等于NaN

[TOC]

不知道这个小知识点用得多不多,曾经在书上看到过,所以有一些印象,前段时间顺手写出类似如下的代码

var result;
if (parseInt(‘abc‘)==NaN) {
  return "相等";
} else {
  return "不等";
}

断点调试之后发现无论如何都不相等,方法parseInt()返回的结果确实是NaN,但是与右侧的NaN比较返回的结果却是false,这时候才突然想起来NaN有不等于自身的特性,所以简单收集一下资料做个整理

原因

了解原因之前我们先明确一个问题,什么时候回出现NaN,理论上来说有两种情况

  • 表达式计算
  • 类型转换

我们逐个分析

表达式计算

当运算中使用了 + - * / 等运算符的时候,js会自动进行转换,讲参与计算的变量转换成js的基本类型之一的Number类型,如果转换失败就会返回NaN。比如说:

console.log(12 + ‘a‘); //NaN

类型转换

比较典型的就是最初的例子里使用的parseInt(),除此之外还有parseFloat()和Number(),传入一个非数变量结果就是NaN,很好理解,顺便一提parse系列方法与Number()有些不同。

parseInt(‘123abc‘); // 123
Number(‘123abc‘); // NaN

总结

从上面两种产生NaN的情况来看,NaN是一种异常的结果,也就是“not a number”,虽然它也是一个变量,但它是描述性变量,‘a‘不是一个数字(not a number),‘b‘也不是一个数字(not a number),但是‘a‘和‘b‘并不相等,所以NaN != NaN也就成立了。

原文地址:https://www.cnblogs.com/LFeather/p/11789303.html

时间: 2024-10-13 13:25:53

NaN不等于NaN的相关文章

为什么 NaN 不等于自身?

NaN 即 `Not a Number` , 不是一个数字, 那么NaN到底是什么呢? 话说在JavaScript中,有6大数据类型,分别包括string,number,boolean,undefined,null和object, 而对于JS来说,整数和浮点数都统称为number类型,除此之外,number类型还有一个很特殊的值,即NaN, 它是用来表示是否属于number类型的一种状态: 是或否.而不是一个确切的值. 那么,NaN值一般会在什么情况下出现呢?一般有两种情况: (1) 一个表达式

神马是 NaN,它的类型是神马?怎么测试一个值是否等于 NaN?

NaN 是 Not a Number 的缩写,JavaScript 的一种特殊数值,其类型是 Number,可以通过 isNaN(param) 来判断一个值是否是 NaN: console.log(isNaN(NaN)); //true console.log(isNaN(23)); //false console.log(isNaN('ds')); //true console.log(isNaN('32131sdasd')); //true console.log(NaN === NaN);

python 值比较判断,np.nan is np.nan 却 np.nan != np.nan ,pandas 单个数据框值判断nan

pandas中DataFrame,Series 都有 isnull()方法,而数据框却没有,用了就会报错:AttributeError: 'float' object has no attribute 'isnull' 怎么判断单个框是否为 np.nan Python常规的判断,==,和is, 这对None是有效的 None is NoneOut[49]: True None == NoneOut[50]: True 而对,np.nan,只能用is da1pd.ix[6000996,u'团队']

《JavaScript高级程序设计(第三版)》-3

相等操作符 相等和不相等 在转换不同的数据类型时,相等和不想等操作符遵循下面基本规则: 如果有一个操作符数是布尔值,则在比较相等性之前先将其转换为数值--false转换为0,而true转换为1: 如果一个操作数是字符串,而另一个操作数是数值,在比较相等性之前先将字符串转化为数值: 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较. 这两个操作符在进行比较时则要遵循下列规则: null和undefined是相等的. 要比较相等性之

JS 高级程序设计 第三章

1.标识符: 标识符,是指变量.函数.属性的名字,或者函数的参数. 标识符的命名规则: (1)第一个字符必须是字母.下划线或者美元符号 (2)其他字符可以是字母.下划线.美元符号和数字. 修改变量值的同时可以修改值的类型 2.用var操作符定义的变量将成为定义该变量的作用域中的局部变量,省略var将建立一个全局变量. 3.ECMAScript中有五种简单的数据类型:Undefined.Null.Boolean.Number.String,还有一种复杂的数据结构-Object,它的本质是一组由无序

JS中==与===区别

==和===定义 ==和===虽然都是关系表达式运算符,但它们的定义是有所不同的: ==:称作相等运算符(Equality Operator),它用来检测两个操作是否相等,这里的相等的定义非常宽松,可以允许类型的转换 ===:称作严格相等运算符(Strict Equality),也被称之为恒等运算符(Identity Operator)或全等运算符,它用来检测两个操作数是否严格相等 == 和 ===运算规则 JavaScript中==和===运算符,它们的运算都具有自己的运算规则. ==运算规则

Java日志——2016年5月30日

1. 局部变量必须初始化,可以定义的同时初始化,也可以定义完成之后进行初始化. 2. Java7新特性:数字之间可以使用"_"连接,eg:23_44_5 = 23445,0B1101_1010 = 0B11011010 3. 二进制表示0b开始:八进制以0开始:十六进制以0x开始. 4. char类型可以直接赋值十进制.二进制.八进制或十六进制的字面量,编译器自动将字面量转化为char类型. 5. char类型也可以使用四位十六进制表示Unicode字符,格式为char c = '\u

JavaScript高级程序设计:第三章

基本概念 一.语法: 1.区分大小写: 2.标识符:指变量.函数.属性的名字,或者函数的参数.标识符可以是按照下列格式规则组合起来的一个或多个字符: (1)第一个字符必须是一个字母.下划线(_).或者一个美元符号($); (2)其他字符可以是字母.下划线.美元符号或数字. 概括地说,标识符就是首字母不能是数字的,以字母.数字.下划线和美元符号组合的一个或多个字符. 3.注释: (1)单行注释以双斜杠开头: //单行注释. (2)块级注释以/*..*/包围: /* 这是一个 * 块级注释 */ 4

ES6-Set and Map

依赖文件地址 :https://github.com/chanceLe/ES6-Basic-Syntax/tree/master/js 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>[es6]-12-Set和Map结构</title> 6 <script src="./js/browser.js"