浅析JavaScript中的特殊数据类型
在JavaScript中,有6大数据类型,分别包括string,number,boolean,undefined,null和object
一、JS中的特殊类型:NaN
NaN即NotaNumber,不是一个数字,那么NaN到底是什么呢?而对于JS来说,整数和浮点数都统称为number类型,除此之外,number类型还有一个很特殊的值,即NaN,它是用来表示是否属于number类型的一种状态,而不是一个确切的值(所以,NaN不等于自身)。
那么,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是JavaScript6种数据类型中的一种,该类型只有一个值,也就是undefined。undefined意为`未定义`,即当使用var声明了变量但未进行赋值时,这个变量的值就是undefined,其产生的原因有两种:
(1)访问对象不存在的属性或方法
(2)声明了变量但从未赋值
varv1,obj={}; console.log(v1);//undefined console.log(obj.get);//undefined typeofv1;//"undefined" typeofv2;//"undefined" typeofobj.get;//"undefine" typeofobj;//"object"
和NaN不同的是,undefined虽然也代表变量的一个状态,但这个状态值是确定唯一的,即当一个变量声明了但没有赋值时,它的状态就是undefined,因此下面表达式是成立的:
varb; b==undefined;//true
理解了undefined以后,再理解null就容易多了,null类型也只有一个值:null,表示一个变量中没有包含有效数据。null在这里意为空值、空对象的意思,更确切的说,一个被赋值为null的变量没有保存有效的数值、字符串、布尔、数组或对象等,可以通过给一个变量赋值为null来清空变量中的内容。产生null的原因只有一个:即对一个变量显式的赋值为null。
varp=null; console.log(p);//null typeofp;//"object" typeofnull;//"object"
还是和NaN来比较,null也是一个确定切唯一的状态值,当一个变量被赋值为null时,那么它就和null相等,因此下面表达式也是成立的:
varobj=null; obj==null;//true
另外:
varv1=null; varv2; console.log(v1+1);//1 console.log(v2+1);//NaN vari=i+1; varj=i+1; console.log(i);//NaN console.log(j);//NaN console.log(i==j);//false
总结
以上所述是小编给大家介绍的JavaScript中的特殊数据类型,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!