JS中数据类型的转化

数据类型的转化
在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
						注:如果字符串包含的是一个可以为解析为整数的数,或者,小数点后面都是零,那么会返回整数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值