数据类型的相互转化

121 阅读1分钟

数据类型的相互转化

强制转化

1. 其他类型转数字 Number()

  1. 字符串转成数字 
    
  2. 纯数字字符串 , 成功的转成对应的数字
    
  3. 非数字字符串 -> NaN
    
  4. 空字符串和空格字符串  -> 0
    
  5. 布尔值转成数字:true -> 1
                  false -> 0 
    
  6. 其他
    null -> 0
    undefined -> NaN
    

其他类型转字符串 String()

全部相当于加了引号

其他类型转成布尔值 Boolean()

  •  0和NaN -> false
    
  •  空串 -> false   空格字符串 -> true
    
  •  null -> false
    
  •  undefined -> false
    

null 和 undefined 区别

  •  null == undefined  null !== undefined 
    
  •  nullundefined都转布尔值false
    
  •  null转数字0  undefined转数字NaN
    
  •  null 空对象(也是一种值) , undefined 已声明但是没有值
    

隐式转化 ----- 程序自己完成的转化

数字的隐式转化

  • 算术运算   + - * / %  隐式转化为数字
      注意:+在遇到字符串的时候,会自动转字符串进行拼接
      var a = '2' - '1' ;
      console.log(a) ;   // 数字1
    
      var b = 'hi' - 1 ;
      console.log(b) ;  // NaN
    
      var c = true + 1 ;
      console.log(c) ;  // 2
    
      var d = null + 4 ;
      console.log(d) ;  // 4 
      
      var f = true + '1' ;  //  true1拼接
    
  • 比较运算  隐式转化为数字
      `注意:两个字符串进行比较的时候,不转数字,而是一位一位的比较ASCII值(短路)
      console.log(true == 1) ;   // true
      console.log('20' > '111111111111') ;  // true
      console.log('a' < 'b') ;  // true   ASCII值`
    
  • 字符串的隐式转化
      + 且至少有一个字符串  
        类型不一样  变成一样的   转数字进行比较
          console.log('a' < 2) ;  // false  NaN
          console.log(null < 2) ;  // true  0
          
    

隐式转化与赋值的问题

    var a = 1 ;
    var b = '1' ;
    var c = a + b ;  // 隐式转化只是在计算的时候,转化了值,没有转化变量
    console.log(typeof a) ;   // a不会发生改变

    // 变量只会通过赋值发生改变!!!!!!