美文网首页
JS 隐式转换

JS 隐式转换

作者: FConfidence | 来源:发表于2017-06-19 17:45 被阅读116次

    隐式转换

    1. 数据类型

      • 基本数据类型: undefined string boolean null number symbol(es6新加)
      • 复杂数据类型:object
      • typeof返回的7中数据类型: undefined string boolean null number object function
    2. 数字与其他类型加法

      • 字符串 123+ "456" == "123456" 数字转字符串 toString()
      • 布尔类型 123+false == false+123 = 123, 123+true==true+123==124 布尔类型转数字0
      • null类型 123+null==null+123==123 null转数字0
      • undefined类型 123+undefined==Nan undefined转数字NaN
    3. 字符串与其他类型加法

      • 布尔类型 "hello" + false == "hellofalse" , "hello"+true=="hellotrue" 布尔类型转字符串
      • 数字类型 "hello"+123=="hello123" 数字类型转字符串
      • null类型 "hello"+null=="hellonull" null类型转字符串
      • undefined "hello"+undefined=="helloundefined" undefined转字符串
    4. null和undefined

      • null+undefined == NaN 两者都转数字, null转数字为0, undefined转数字为NaN 任何数字与NaN相加为NaN, 判断是否为NaN不能用==, NaN于自身都不等, 使用isNaN()函数
    5. 其他类型的运算

      • 减法,乘法,除,取余,大于小于等操作都转成Number类型
          1-false == true
          20-"1" ==19
          20 < "40" == true
          "1">false == true
          "1abcd">false == false//(因为"1abcd转数字为NaN")
          "1abcd"<false
      
      • String类型的带有字符的比如: '1a' ,'a1' 转化为 NaN 与undefined 一样
      • parseInt, parseFloat和Number转化
        • parseInt("123abcd") = 123, 但是Number("123abcd") == NaN(这里应该使用isNaN判断), Number要严格一些,基本上,只要有一个字符无法转成数值,整个字符串就会被转为NaN。
        • parseFloat("1.23a4.56b.78") ==1.23)
    6. 转换为boolean类型

      • false: null, undefined, 0, '', ""(空串),false , NaN
      console.log(!!null)
      console.log(!!undefined)
      console.log(!!0)
      console.log(!!"")
      console.log(!!'')
      console.log(!!NaN)
      
      • undefined == null 返回true 比较特殊 (null与自身以及undefined等 与其他都不等)
      • ** 0 == undefined**, undefined==0 返回false
      • ** null == 0**, 0 == null 返回false
      • ** null == "0", ** "0" == null 返回false
      • ** null == false** 返回false
      • ** NaN == undefined, NaN == null ** 返回false
      • ** "" == false** 返回true ( 两者都转数字0)
      • ** "0" == false ** 返回true, (两者都转数字0)
      • ** 0 == false** 返回true (两者都转数字0)
    7. Object的基本运算

      • obj与其他类型运算的时候, 会调用valueOf方法
      • 在调用String(obj)的时候, 会调用toString()方法
      • 对象的比较简单来说就是转化成字符串之后再进行比较
      0 == [];        // true, 0 == [].valueOf(); -> 0 == 0;
      '0' == [];      // false, '0' == [].toString(); -> '0' == '';
      2 == ['2'];     // true, 2 == ['2'].valueOf(); -> 2 == '2' -> 2 == 2;
      '2' == [2];     // true, '2' == [2].toString(); -> '2' =='2';
      
      []+{} // "[object Object]"
      []+[] // ""
      1+[], []+1 // "1"
      
      {}+[]  //0  这里[]解析成0
      
      {}+1 // 1
      1+{} // "1[object Object]"
      
      {}+{} // "[object Object, object Object]"
      
      /*  简单小结
      [] 解析为 "" 或者0  跟数字运算时解析成数字0, 与字符串运算时解析成空串
      []+{}, {}=[]
      {} 在前面就解析成 0
      {} 在前面就解析成 "[object Object]"
      {} 两个一起的话 都解析成为字符串 "[object Object]"
      */
      

    相关文章

      网友评论

          本文标题:JS 隐式转换

          本文链接:https://www.haomeiwen.com/subject/blagqxtx.html