js 数据类型 存储位置

原始数据类型(Undefined,Null,Boolean,Number、String)

      存储位置:栈

      传值方式:按值传递

                  

引用数据类型(对象、数组、函数)

      存储位置:堆     

      引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址,当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后,从堆中获得实体。

var obj = {x : 0};
    obj.x = 100;    
    var o = obj;    //实际拷贝的是obj的内存地址
    o.x = 1;
    console.log(obj.x)       // 1,   obj被修改
    o = {x:100};  //等同于重新开辟内存,不是修改
    console.log(obj,o)         //{x:1} {x:100}

  引用类型的值是同时保存在栈内存和堆内存中的对象

javascript不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,那我们操作啥呢? 实际上,是操作对象的引用,
所以引用类型的值是按引用访问的。
准确地说,引用类型的存储需要内存的栈区和堆区(堆区是指内存里的堆内存)共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,也可以说是该对象在堆内存的地址。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章