javascript的数据类型
javascript一共有7种数据类型,它们分别是number,string,boolean,null,undefined,object以及es6新增的symbol。其中number,string,boolean,null,undefined和symbol是原始值,object是引用值。
一般情况下可以用typeof来判断一个数据的数据类型:
图:1-1
如图1-1所示:
undefined ---> 声明但未赋值的变量,值就是undefined,一个对象不存在的属性或未经声明的变量。
number ---> 数字或者NaN。
boolean ---> true或false。
object ---> {}或null,判断null为object是一个历史遗留问题,在早期null是用来给对象占位的。
function ---> 函数
symbol ---> Symbol函数构建出的值
显式类型转换
显示类型转换是通过js的一些函数来实现的。
-
其他类型转换成数字: 其他类型转换成数字有三个方法:Number(),parseInt(),parseFloat。第一个可以把任意值转换为数字类型, 两个方法专门用于对字符串的转换。 Number转换规则: 1.如果是Boolean值,true和false转换为0和1。 2.如果是数字值,则简单的传入直接返回。 3.如果是null则返回0。 4.如果是undefined则返回Nan。 5.如果是字符串则遵循以下规则: - 如果字符串只包含数字(前面带正负号亦可),就转换为同样大小的数字。即:“1”返回1,“+3413”返 回3413,“-33”返回-33,而'011'或'-011'会忽略掉前面的0转换为11和-11。 - 如果字符串中包含有效的小数格式,则转换为对应的小数,同样地会忽略掉前面的0。 - 如果字符串是有效的十六进制格式,即以'0x'开头,0x后面的值在0-f之间,则转换为对应大小的十进制数值 - 如果字符串是空字符串或只有空格的字符串,则转换为0。 - 除以上格式的字符串全部转换为NaN 6.如果是对象类型,则先调用对象的valueof方法,把它的返回值传入Number,按照前面的规则返回值。如果返回值为NaN,则 调用对象的toString()方法,把结果放入Number()进行转换。
parseInt()转换规则: 1.pareInt传入字符串,会忽略掉字符串前面的所有的空格,知道解析到第一个字符,如果改字符是数字或者是正负号, 则继续向后读取,直到解析到非数字字符为止;如果不是数字字符或正负号,则返回NaN。空字符串也是NaN,而Number 函数返回0。 parseInt('-1.2aaa) --> -1.2 parseInt('a112') --> NaN
2.parseInt传入以0x开头的字符串,后面跟有效的十六进制字符时,会把有效的十六进制字符转换为对应的十进制数值。 3.parseInt可以传入第二个参数,参数的取值为2~36之间的数值作为转换数值的基数。转换十六进制的数值时,可以省略0x。 parseInt('ff',16) --> 15*16 + 15 parseInt('10',8) --> 8
parseFloat()转换规则: parseFloat和parseInt基本相似,只是parseFloat可以解析小数点,遇到第二个小数点就舍弃并返回一个有效的小数。 而parseInt不能识别小数点,只能返回一个整数。parseFloat的第二个参数无效。
-
其他类型转换为字符串: 1. toString方法: 除了null和undefined外,其他数据类型都有toString方法(字符串也有toString方法,该方法返回该字符串的一个 副本)。 但是数值和对象字面量不可以直接调用,需要把他们存到一个变量中,再用该变量调用toString。 2.String转型函数 可以把任何值传入该函数,该函数会返回对应的字符串。
-
其他值转布尔
用Boolean()转型函数。只有false,0,NaN,空字符串,null,undefined可以转换为false,其他值都转换为true。需要特别注意
的是[]和{}转换为true。
隐式类型转换
- 在进行++,--,+,-,* ,/,%运算时会隐士的把非数字类型的值转换为数字类型具体转换规则如下:
-与包含有效数字的字符串进行运算时,会把它转换为数字再进行运算,加法运算和字符串进行运算时情况特殊,他会把数字转换
为字符串然后进行字符串拼接。
-与包含非有效数字的字符串进行,它转换为数字类型是NaN,NaN与任何数运算都是NaN。
-与true和false运算时,它们转换为1和0,在进行数学运算。
-与对象运算时,会先调用对象的valueOf方法以取得可供操作的值进行运算,如果运算结果为NaN;再调用该对象的toString方法,
取得其返回值按照上面的规则进行运算。
-对象字面量和函数字面量进行数学运算时返回值的为0: {} - 1 = -1; function a() {} + 1 = 1;
-!,<,>,<=,>=,if,while,do while,都会把值转化为布尔值。
js比较规则:
- 如果都是数字,则进行数字大小比较。
- 如果是字符串,则比较第一个字符的编码值,如果一样则比较第二为的编码值,以此类推。
- 如果是布尔值进行比较,则先把布尔值转换为数字进行比较。
- 如果是数字和字符串,则先把字符串转换为数字进行比较。如果字符串的转换结果为NaN,NaN与任何类型的值都为false。
- 如果是和对象比较,则先调用对象的valueOf方法,取得其返回值进行比较;如果对象没有valueOf方法,则调用对象的
toString方法,并取得其值按照上面的规则进行比较。