数据类型的转化
在JS中,变量中存储的数据类型是没有限制的
也就是变量中可以存储任何符合JS语法规则的数据类型
但是在JS的执行过程中,往往需要变量中存储的数值是某种特定的数据类型,此时便须要进行数据类型的转化
所谓的数据类型的转化,就是讲当前的数据类型转换成其他的数据类型
JS中的数据类型转化分成两种
1.一种是自动转化,
是计算机自动进行的转化,自动转化不是什么时候都会发生,只有在特定的情况下才会发生
2.另一种是强制转化
是人为主动进行的转化
自动转化:
1.其他数据类型转化成布尔类型 boolean bool
这个一般在if等判断语句中才会进行自动转化
if判断就是根据不同的判断结果来执行不同的程序内内容,这个判断的结果就是布尔类型
其他类型转化成布尔类型的原则
undefined
null
数值 中的0 和 NaN
字符串中的空字符串""
以上五种类型转换成布尔类型会转换成false
数值中非零的数,包括负数
字符串中的非空字符串
这几种都转化成true
2.其他类型转化成字符串类型 str string
在进行加法运算时,只要有一方是字符串,不论另一方是什么数据类型,会强制性转化为字符串,进行字符串拼接匀速,最终得到一个新的字符串
其他类型转化成字符串类型的原则
布尔值转化成字符串 "true" "false"
undefined 转化成字符串 "undefined"
null 转化成字符串"null"
数值 转化成字符串 "数值" 像NaN直接转为"NaN"
1.像科学计数法这种表示方法,会先进行解析,解析为数值,然后在进行转化
2.像进制 如果是非十进制,会先将二进制、八进制、十六进制先转换成十进制,然后再转换成字符串
复杂类型的转化比较特殊
1.数组
数组再转化成字符串的时候,是吧[]这里面的所有内容转化成字符串的形式
2.对象
任何对象中的任何内容,都会转化成固定形式 [object Object]
3.函数
将函数整体,转化成字符串
3.其他类型自动转化成数值类型 num number
数值类型的转化只有在进行算数运算的时候才会触发自动转化
其他类型转化成数值类型的原则:
true ----------> 1
false ----------> 0
undefined ----------> NaN
null -------------> 0
字符串类型:
1.如果整个字符串是纯数字字符串,则直接转化为相对应的数值,也就是直接把引号去掉,再转化是,会忽略前导零,从最左边第一个不为零的数开始转化
2.如果是科学计数法的字符串,先进行科学计数法的解析,在进行数值的转化
3.如果字符串中是进制,因为忽略前导零的问题,所以只能识别十进制,十六进制,二进制,没有办法识别八进制。进制再转化时,也是先将其他进制转化正十进制,在进行数值转化
3.如果是符合字符串,在输出NaN
4.如果运算中有NaN参与,那么最终的结果依旧是NaN
注:这里的运算不包括加法运算,因为字符串只要碰到加号就变成了字符串的拼接,而不会进行转化。
注:这三个都是非数值
数组
转化成NaN
对象
转化成NaN
函数
转化成NaN
强制类型转化:是直接调用JS中定义好的方法 / 函数来进行转化
1.其他类型强制转化成布尔型
使用Boolean(变量/数据); 来进行转化
转化原则与自动转化原则一致:
false 0 "" null undefined NaN
true 其他数据都转成true
注:Boolean() 这个方法,并不会改变变量中存储的原始数值
2.其他类型强制转化成字符串类型
1.对于数值字符串使用.tostring() 来进行转化
.tostring之前必须是变量的形式,不能是数字
.tostring() 同时()里面可以写要转化的进制,不写就默认按十进制输出,可写的进制的范围 2~36
这个范围是由10个数值 + 26个字符所组成的
console.log(a.tostring(2)); 将a中存储的值转化成二进制的
console.log(a.tostring(8)); 将a中存储的值转化成八进制的
console.log(a.tostring(16)); 将a中存储的值转化成十六进制的
console.log(a.tostring()); 将a中存储的值转化成十进制
2.使用String(变量/数据) 这个方法/函数 来进行转化
将()中的变量或者数据,转化成字符串,转化原则与自动转化原则一致
注:也不会改变变量中所存储的原始值。
3.其他类型强制转化成数值类型
1.使用Number(变量/数值)
将其他类型强制性转化为数值类型,转化原则与自动转化相同 可以应用于任何类型变量
true ----------->1
false --------->0
undefined ------>NaN
null ---------->0
"" ------------>0
" "----------> 0
字符串:
1.纯数字字符串,直接转化成相对应的数值, 不论正负 小数或者整数,都会直接被转化
2.科学计数法表示的,先解析科学计数法,然后再转成对应的数值
3.会忽略前导零进行转化 会从左起第一个不为零的数值进行转化 全部为零则为零
4.进制类型的字符串,先将进制转换成10进制然后再转化成数值
注:如果是0B或者0b类型的二进制会转化成十进制输出
0x类型的十六进制也会转化成十进制输出
但是0开头的八进制不会有任何的效果,因为直接忽略了前导零,从零后面的数开始算
可以识别二进制 十六进制 无法识别八进制
5.混合字符串 ---------> NaN
数组 ---------> NaN
对象 ---------> NaN
函数 ---------> NaN
因为以上这三种都不是字符串
2.parseInt(变量/数据) 这个是专门用于把字符串转化成数值的
所以除字符串外的数据类型都是NaN 同时是用于获取变量或者数据的整数部分
从数据的左起解析获取整数的内容 只获取整数
parseInt()函数在转换字符串时,更多的是看其是否符合数值模式,他会忽略字符串前面的空格,直到找到一个非空格字符如果第一个字符不是数字字符或者负号,则会返回NaN
也就是说是一个空字符会返回NaN,如果第一个是数字字符,那么会继续往下进行解析,直到遇到一个非数字字符或者解析完成
parseInt与Number两个函数是不同的,Number中如果是混合字符串直接输出NaN
而在parseInt中如果是一个字符串,则会从最左侧开始,找整数部分,然后把找到的整数部分输出
在parseInt中用进制写法只能识别十六进制,所以采用一种新的方法
识别进制 十六进制 八进制 十进制 二进制都识别 只是写法有些特殊 建议使用这种写法
因为大多数情况下,我们要解析的都是十进制的数值,因此指定基数为10是十分重要的
console.log(parseInt("00001",2)); 1
console.log(parseInt("070", 8)); 56
console.log(parseInt("070", 10)); 70
console.log(parseInt("ff", 16)); 255
如果使用进制自身带有的格式的写法,只能识别十六进制
console.log(parseInt("0xff"));
数组
数组中只会获取第一个数值的整数部分,因为 "," 不是数值所以解析结束,则输出第一个数值,如果第一个值不是数值,则输出NaN,如果第一个值是小数,则只输出整数位
注:在数组中第一为如果出现非十进制的进制,便先将进制转换成十进制然后输出
可以识别二进制 八进制 十六进制的表示方法
对象 -----------> NaN
函数 -----------> NaN
3.parseFloat
获取浮点数部分,
true
false
undefined
null
对象
函数
以上的数据类型都是NaN
数组:数组parseFloat跟parseFloat是一致的
数组中只会获取第一个数值的整数部分,因为,不是数值所以解析结束,则输出第一个数值,如果第一个值不是数值,则输出NaN,如果第一个值是小数,按照小数的输出方式输出,只输出整数位
注:在数组中第一为如果出现非十进制的进制,便先将进制转换成十进制然后输出
可以识别二进制 八进制 十六进制的表示方法
数值:整数浮点数都会完整的获取
字符串:
从字符串左起开始解析,与parsrInt不同,他并不是只取整数部分,而是他会取整个小数部分,这个整个小数部分的意思是,他从左向右解析,直到解析到那个值不是数值为止。并输出该非数值之前的整个小数,即使他后面的值依旧是数值,也不会进行输出
如果是科学计数法,则先进行科学计数法的解析,然后输出小数部分
注:该函数始终忽略前导零,所以单独的在字符串中的进制表示方法,只会输出0
注:如果字符串包含的是一个可以为解析为整数的数,或者,小数点后面都是零,那么会返回整数