最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 深入理解JS中的类型转化

    正文概述 掘金(一木易业)   2020-12-11   376

    哪些操作能导致类型转换

    if 条件判断

    为 false 的值 -> false undefined null 0 '' NaN

    运算符操作

    常见的运算符 + - * /

    + 比较特殊除了相加之外 还有字符串拼接的含义

    1)数字和非字符串相加

    1 + null -> 0;
    
    // undefined 比较特殊 表示未定义的,不是一个数字
    1 + undefined -> NaN
    
    // 会把空对象转换成数字,如果转换不成数字就变成字符串拼接
    1 + {} -> 1[object object]
    
    

    2)非数字相加

    // 把两边都转化成数字
    true + true -> 2
    
    // 如果有一方是字符串,则进行字符串拼接
    true + {} -> true[object object]
    

    valueOf / toString

    对象的原型链上有 valueOf 和 toString 两个方法

    let obj = {
      symbol[toPrimitive](){
        return 500
      },
      valueOf(){
        return 100
      },
      toString(){
        return 200
      }
    }
    
    // 两边都转换成数字 obj 先调用 valueOf valueOf 如果返回不是数字 则继续调用 toString 方法
    true + obj -> 101
    

    symbol[toPrimitive] 是对象内置属性,当一个对象要转换成对应的原始类型时,会调用此方法。

    总结下,当对象要进行类型转换时,会依次调用 symbol[toPrimitive] valueOf toString 

    + 、- 、!

    + - 和 ! 一样,可以放在变量前面,进行快速类型转换

    1 + +'1234' -> 1235
    
    1 + '1234'  -> '11234'
    

    比较元算 > = <

    1)数字和数字直接比较

    2)字符串比较

    // 字符串和字符串,比较的是 AscII 码
    console.log('a'.charCodeAt(0))
    console.log('b'.charCodeAt(0))
    
    'a' < 'b' -> true
    'a' < 'bdede' -> true // 一样的因为比的是第一位
    
    // 数字和字符串相比,字符串先转化成数字,如果转化不成数字 这比较始终返回 false
    1 < '123' -> true
    1 < '1df' -> false
    
    // 如果是对象和字符串相比,需要把对象先转化成基本类型(字符串之后再比较)
    [] == '' -> true
    // [].valueOf 为[],继续调用 [].toString 为 '',比较返回 true
    

    3)==

    如果一方是数字,会先把另一方转换成数字 然后比较 若果其中一方是 boolean 类型 会把 boolean 类型转换为数字

    null == undefined // true
    

    null、undefined 和任何类型相比 == 都返回 false

    NaN 和任何类型相比返回 false 包括它本身

    举例

    console.log([] == ![]);
    // [] == false  单目运算优先级最高 为 false 的情况 false undefined NaN null 0 ''
    // [] == 0      [].valueOf()  -> [] 不是原始类型继续调用 toSting 
    // [] == 0      [].toString() -> ''
    // '' == 0      Number('')
    //  0 == 0      true
    

    (完)


    起源地下载网 » 深入理解JS中的类型转化

    常见问题FAQ

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

    发表评论

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

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

    联系作者

    请选择支付方式

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