最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 关于类型转换那些事儿

    正文概述 掘金(Beatrix)   2021-03-06   436

    显式类型转换

    数字类型转换

    将其他类型转换为数字类型

    Number()

    注意两点:

    1. 引用类型转换为数字类型,会先默认调用toString方法将其转换为字符串,然后再将字符串转化为数字
    2. 对于非有效的字符串会转换为NaN
    3. undefined会转换为NaN
    转换类型转换值转换结果
    number1010nullnull0string''0booleantrue1booleanfalse0array[]0array[1,2]NaN非有效string'123abc'NaNundefinedundefinedNaN

    你可会疑惑对于不同类型的toString方法到底会返回什么?

    请见我的另一篇文章toString方法的调用

    parseInt()/parseFloat

    • 对于String类型而言,它会从左到右依次查找有效的数字字符,直到遇到非有效的字符就停止,并返回有效的数字
    • 对于非String类型而言,先要将其转化为String类型再进行检索
    • 若最终都为无效,则返回NaN
    let str = '12.3abc';
    let str1 = 'abc123';
    parseInt(str);//12
    parseFloat(str);//12.3
    parseInt(true);//NaN
    parseInt(str);//NaN
    
    

    注意NaN是number类型

    字符串类型换

    将其他类型转换为字符串类型

    String()

    默认调用toString方法 具体类型toString方法调用的不同返回值查看之前那篇文章

    String(123);//"123"
    String(true)//"true"
    String(null)//报错
    String(undefined)//报错
    String([1,2,3])//"1,2,3"
    String({})//"[object Object]"
    

    布尔类型转换

    Boolean()

    将其他类型转换为布尔类型

    • 除了'',undefined,NaN,null,false,0转化为布尔类型为false之外,其余类型值转换都为true
    Boolean('') ;//false
    Boolean(undefined) ;//false
    Boolean(null) ;//false
    Boolean(NaN) ;//false
    Boolean(false) ;//false
    Boolean(0) ;//false
    Boolean({});//true
    
    

    隐式类型转换

    隐式类型转换是经常搞错的问题,接下来我们看看它有多坑

    +运算符

    一旦+运算符出现,就一定要清醒一点,因为很可能就掉坑里了

    它有两个作用

    字符串连接符+

    运算对象超过一个,只要其中含有一个非(number,undefined、null、boolean)的值,都会先转换成字符类型,然后进行的字符串拼接

    var a = 123;
    var b = '567'
    console.log(a+b);//123567
    

    算术运算符+

    运算对象中只有(number、undefined、null、boolean)时,它就是算术运算符

    var a = '123';
    var b = 124;
    var c = 'abc';
    a++;//123
    a>b;//false
    +c;//NaN
    console.log(1+true);//2
    console.log(1+false);//1
    console.log(1+null);//1
    console.log(1+undefined);//NaN
    
    

    关系运算符>

    当出现大于小于比较符号时,两种情况 1.只有一边是字符串 这时会将字符串类型使用Number()转换为数字类型然后比较

    console.log("2">1);//true
    
    1. 两边都是字符串时

    这时的比较是,按照字符串的unicode编码来转成数字进行比较的

    console.log("2">"10");//true
    //"2"的unicode编码为50  "10"的为49
    //默认返回的是第一个字符的unicode编码
    

    关系运算符==

    undefined/null

    console.log(undefined == null);//true
    console.log(undefined == undefined);//true
    console.log(null == null);//true
    console.log(undefined == false);//false
    console.log(null == false);//false
    
    

    注意:NaN和任何数据比较都不相等,包括它自己

    复杂数据类型

    复杂数据类型进行隐式转换时,会先转换成String,再转成Number运算 一般顺序如下:

    1. 先使用valueOf()方法获取其原始值,如果不是number类型,就会使用toString()方法转成string
    2. 再将string转成number
    console.log([1,2] == "1,2");//true
    

    看一道经典的题目

    var a =?
    if(a==1 && a==2 && a==3){
    	console.log(1)
    }
    //a等于什么时,能够打印1
    

    首先a肯定不是一个基本类型的值,否则它就不会等于1又等于2又等于3.

    可以利用valueOf方法实现a的改变

    var a = {
    	i: 0,
        valueOf: function(){
        	return ++a.i;
        }
    }
    if(a==1 && a==2 && a==3){
    	console.log(1)
    }
    

    逻辑非!

    1. 它会将其他数据使用Boolean()转成布尔类型,然后再进行逻辑运算
    console.log(!{})//false
    

    Boolean({})=>true 然后!true=> fasle

    1. 逻辑非的优先级是高于运算符的
    console.log(!{} == {})//false
    console.log(![] == [])//true
    

    下载网 » 关于类型转换那些事儿

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元