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不允許直接訪問內存中的位置,也就是說不能直接操作對象的內存空間,那我們操作啥呢? 實際上,是操作對象的引用,
所以引用類型的值是按引用訪問的。
準確地說,引用類型的存儲需要內存的棧區和堆區(堆區是指內存裏的堆內存)共同完成,棧區內存保存變量標識符和指向堆內存中該對象的指針,也可以說是該對象在堆內存的地址。

 

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