JS里的类型

2019-09-29  本文已影响0人  gaoyanglol

数据类型转换

转换为字符串

转换为布尔值

转换为数字

基本数据类型和复杂数据类型的区别

  1. 在内存中的存储方式不同。

    • 基本类型存在栈内存 (stack) 中;
    • 复杂类型存在堆内存 (heap) 中,在栈中存储引用地址。
                     //      stack        heap
    var a = 1        // a |64位浮点数 |
    var b = 2        // b |64位浮点数 |  { 100
    var o = {        // o |64位地址100|   --------------
      name: 'frank', // c |  1       |    name:'frank' 
      age: 18        //   |          |    age: 18      
    }                //   |          |    gender:'male'}
    var c = true     //   |          |   
    
  2. 访问方式不同。

    • 基本类型直接访问栈内存
    • 复杂类型先访问对象在栈内存中的地址,再按地址访问堆内存中对象。
  3. 复制机制不同

    • 基本类型:a = b 是将b中原始值的副本赋值给a,a和b相互独立,互不影响
    • 复杂类型:a = b 是将b中存储的对象的引用地址赋值给a,a和b指向同一个对象,其中一个做了改变,另一个也会受影响。
    var b = {
      age : 10
    }
    var a = b
    a.age = 20
    b.age
    20
    
  4. 例题

    // 第一题          //     stack       heap
    var a = {}        // a | ADDR33 |  { 33
    a.self = a        //   |        |   -------------
    a.self.self.name  //   |        |   self: ADDR33 
    'a'               //   |        |   name:'a'     }
                      //   |        |   
    
                      
    
    // 第二题         //      stack       heap
    var a = {n:1}    //  a |ADDR34  |  { 34
    var b = a        //  b |ADDR34  |   -------------
    a.x = a = {n:2}  //    |        |   n : 1        
                     //    |        |   x : ADDR54   }
    alert(a.x)       //    |        |   
    undefined        //  a |ADDR54  |  { 54
    alert(b.x)       //    |        |   -------------
    [object Object]  //    |        |   n : 2        }
                     //    |        |
    

垃圾回收

如果一个对象没有被引用,它就是垃圾,将被回收。

浅拷贝 vs 深拷贝

上一篇 下一篇

猜你喜欢

热点阅读