美文网首页
为什么NaN不等于自身?

为什么NaN不等于自身?

作者: 荧惑3_3 | 来源:发表于2017-07-23 11:19 被阅读263次

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

那么,NaN值一般会在什么情况下出现呢?

一般有两种情况:

(1) 一个表达式中如果有减号(-)、乘号(*) 或 除号(/) 等运算符时,JS引擎会在计算之前试图将运算符两边的变量转化为number类型(使用Number(x)做转化),如果转化失败,表达式将返回NaN

加号(+)不会将其两边的变量转化为number类型,这是因为JS表达式的执行顺序是按照运算符的优先级从左到右依次进行的,如果加号(+) 两边的变量都是number类型时,才会做数字相加运算,如果其中有一个变量是字符串,则会将两边都作为字符串相加,如: 5+4+"6"="96"

(2) 直接使用 parseInt,parseFloat 或 Number 将一个非数字的值转化为数字时,表达式返回 NaN

"abc"- 3// NaN

parseInt("abc")// NaN

parseFloat("abc")//NaN

Number("abc")//NaN

对于数字+字符的值,其转化结果会有所不同:

Number("123abc");//NaN

parseInt("123abc");//123

parseInt("123abc45");//123

parseFloat("123.45abc");//123.45

这是因为Number转化的整个值,而不是部分值,parseInt 和 parseFloat 只转化第一个无效字符之前的字符串。

因此,当一个字符串不能被Number,parseInt,parseFloat成功转换时,就返回NaN,表示该字符串无法被识别为数字类型,这是一个异常状态,并不是一个确切的值。

所以 NaN != NaN , 因为它是一个异常状态,而不是一个确切的值。

另外,与NaN相关的还有一个函数,即 isNaN() , 它的作用是检查一个字符串是否能被Number()成功转换,即强制转化整个字符串。

isNaN("123")//false 能转换

isNaN("abc")//true 不能转换

isNaN("123abc")//true 部分可转换,但整体不能转换

isNaN("123.45abc")//true 部分可转换,但整体不能转换

JS中还有另外两个特殊类型:undeinfed 和 null

undefined 是JavaScript 6种数据类型中的一种,该类型只有一个值,也就是undefined。 undefined意为`未定义`,即当使用var声明了变量但未进行赋值时,这个变量的值就是undefined,其产生的原因有两种:

(1)访问对象不存在的属性或方法

(2)声明了变量但从未赋值

var v1,obj = {};

console.log(v1);//undefined

console.log(obj.get);//undefined

typeof v1;// "undefined"

typeof v2;// "undefined"

typeof obj.get;// "undefined"

和NaN不同的是,undefined虽然也代表变量的一个状态,但这个状态值是确定唯一的,即当一个变量声明了但没有赋值时,它的状态就是undefined ,因此下面表达式是成立的:

var b;

b == undefined;//true

理解了undefined 以后,再理解null 就容易多了,null类型也只有一个值:null, 表示一个变量中没有包含有效数据。null在这里意为空值、空对象的意思,更确切的说,一个被赋值为null的变量没有保存有效的数值、字符串、布尔、数组或对象等,可以通过给一个变量赋值为null来清空变量中的内容。产生null的原因只有一个:即对一个变量显式的赋值为null 。

var p = null;

console.log(p);//null

typeof p ;// "object"

typeof null;// "object"

还是和NaN来比较,null 也是一个确定切唯一的状态值,当一个变量被赋值为null时,那么它就和null相等,因此下面表达式也是成立的:

var obj = null;

obj == null;//true

相关文章

  • JS中为什么 NaN 不等于 NaN

    JS中为什么 NaN 不等于 NaN 为什么NaN === NaN 是返回false呢? 因为NaN 是:Not ...

  • 为什么NaN不等于自身?

    NaN 即Not a Number, 不是一个数字, 那么NaN到底是什么呢? 话说在JavaScript中,有6...

  • js 中怎么判断一个数据是否是NaN

    NaN不是一个数字,NaN不等于本身,只要NaN不等于本身,利用这个特性判断是否是NaN。

  • js如何检查NaN是否等于NaN

    NaN是Not-A-Number的意思 JS有一个特点,其中NaN是唯一不等于自身itself的值。那么我们如何测...

  • es5--数据类型笔记

    数值 判断NaN更可靠的方法是,利用NaN为唯一不等于自身的值的这个特点,进行判断。 isFinite方法返回一个...

  • Javascript Comparison

    Strict Equality Comparison===使用的算法,NaN不等于NaN,+0不等于-0 Same...

  • JS学习

    使用变量要先进行声明 采用异步工作模式 数值NAN是JavaScript中唯一不等于自身的值 数组的forEach...

  • ES6 对象的新增方法

    1 Object.is() 和===行为一样,不同之处只有两个:一是+0不等于-0,二是NaN等于自身。 2 Ob...

  • 理解 jQuery

    写在最前之芳芳说 1.只能用=== 和 !== 2.=== 两个特例 : NaN 不等于 NaN 声明的对象不...

  • 数学运算一定返回数字不然就会NaN

    数学运算一定返回数字或者NaN不可能返回其类型。 NaN不等于自己。null 等于undefined。undefi...

网友评论

      本文标题:为什么NaN不等于自身?

      本文链接:https://www.haomeiwen.com/subject/nngskxtx.html