数据类型
JS数据类型分类
基本数据类型:Number、String、Boolean、Undefined、Null、Symbol(ES新增)
引用数据类型:Object(包括Array、Function)
注意:逻辑上讲,null值表示一个空对象指针,这也是给typeof传一个null会返回"object"的原因
在定义将来要保存对象值的变量时,建议使用null来初始化,不要使用其他值。这样,只要检查这个变量的值是不是null就可以知道这个变量是否在后来被重新赋予了一个对象的引用。
任何时候,只要变量要保存对象,而当时又没有那个对象可保存,就要用null来填充该变量。这样就可以保持null是空对象指针的语义,并进一步将其与undefined区分开来。
Number类型中的NaN
NaN含义:”不是数值“,本来要返回数值的操作失败了,(0/0)会返回NaN;
NaN不等于任何值,NaN == NaN//false
数据类型存储
栈:计算机为原始数据类型开辟的存储空间,String、Number、Boolean、Undefined、Null
堆:计算机为引用类型开辟的一块内存空间,object
数据类型检测
typeof与instanceof
typeof返回值有七种
-
"number"表示值为数值
-
"string"表示值为字符串
-
"boolean"表示值为布尔值
-
"undefined"表示值未定义
-
"object"表示值为对象(而不是函数)或null
-
"function"表示值为函数
-
"symbol"表示值为符号
注意:
1、typeof是操作符不是函数,不需要使用参数,但可以有参数
2、typeof null返回的是一个"object",特殊值null被认为是一个对空对象的引用
instanceof
通过原型链来检测,返回一个布尔值
A instanceof B
A是否是B的实例对象
数据类型转换
隐式转换
不经程序员调用函数,程序隐式自动对数据类型进行转换
1、if判断
if(null)//false if(" ")//true if("")//false
if判断中应该传入一个布尔值(Boolean)
当传入的值是其他类型的时候,程序会隐式调用Boolean()函数将传入的值转换为布尔值
if(null)->if(Boolean(null))->if(false)
2、==判断
==会判断两边的值是否相等
===除了判断值以外,还会判断数据类型
null == undefined -> Boolean(null) == Boolean(undefined) -> false == false -> truenull == undefined -> Number(null) == Number(undefined) -> 0 == 0 -> true
null === undefined 为false,因为数据类型不同
3、逻辑运算符&&和||的隐式转换
1 && null -> Boolean(1) && Boolean(null) -> true && false -> false
显示转换
程序员显示调用函数,将一个数据类型的值转换为其他数据类型的值
1、其他数据类型转为布尔值Boolean
String类型:非空字符串为true,""空字符串为false
Number类型:非零数值(包括无穷值)为true,0、NaN为false
Object类型:任意对象(包括{})为true,null为false
Undefined类型:这个类型只有一个值undefined,为false
2、其他数据类型转为数值Number
Number()中传入各类型的参数
布尔值:true转为1,false转为0
数值:直接返回
null:返回0
Undefined:返回NaN
字符串:空字符串返回0,包含十进制或其他进制的数字返回对应数值,字符串中包含任何其它字符返回NaN
parseInt()函数
parseInt()函数更专注于字符串是否包含数值模式。字符串最前面的空格会被忽略,从第一个非空格字符开始转换。如果第一个字符不是数值字符、加号或减号,parseInt()立即返回NaN。这意味着空字符串也会返回NaN(这一点跟Number()不一样,它返回0)。如果第一个字符是数值字符、加号或减号,则继续依次检测每个字符,直到字符串末尾,或碰到非数值字符。比如,"1234blue"会被转换为1234,因为"blue"会被完全忽略。类似地,"22.5"会被转换为22,因为小数点不是有效的整数字符。
parseInt()函数
parseInt()函数更专注于字符串是否包含数值模式。字符串最前面的空格会被忽略,从第一个非空格字符开始转换。如果第一个字符不是数值字符、加号或减号,parseInt()立即返回NaN。这意味着空字符串也会返回NaN(这一点跟Number()不一样,它返回0)。如果第一个字符是数值字符、加号或减号,则继续依次检测每个字符,直到字符串末尾,或碰到非数值字符。比如,"1234blue"会被转换为1234,因为"blue"会被完全忽略。类似地,"22.5"会被转换为22,因为小数点不是有效的整数字符。
3、其他类型转换为字符串
调用toString()方法(null和undefined没有这个方法)
调用String()方法,null返回"null",undefined返回"undefined"
使用+操作符